2009-09-23 139 views
0

我们的iPhone应用程序有一个聊天室,用户可以发表评论。最近,聊天室已经崩溃了应用程序,因为用户正在向他们的评论添加表情符号。我去了我的服务器PHP脚本,不允许不在A-z0-9范围内的字符(我也允许大约30个标点字符),希望这可以防止应用程序/馈送崩溃。然而,emojis仍然会让聊天室崩溃。Emojis导致iPhone崩溃

这是在我的服务器脚本我的正则表达式过滤器,有特殊字符不允许评论:

$special = "/\W/"; 
$special2 = "/[\~\!\@\#\$\%\^\&\*\(\)\_\+\`\-\=\{\}\|\:\\\"\<\>\?\,\.\/\;\'\[\]]/"; 

if ((preg_match($special,$comment)) && (!preg_match($special2,$comment))) 

的PHP语句上面说的是,如果脚本找到一个字符不是[AZ] [0- 9],而不是列出的标点符号之一,然后拒绝评论。

,最近打破了应用程序的注释低于:

<comment>Exciting times&icirc;€Žits all about the &icirc;Â&sect; go Team!!</comment> 

就做什么,以防止应用程序崩溃有什么建议?

+0

找出*什么*会崩溃应用程序会更有意义吗?而不是在PHP中周围?你的应用程序有一个bug,一个漏洞,你需要修复_that_,并且我们没有任何细节可以帮助你。 – 2009-09-23 17:00:28

+0

是的。当我在聊天室中输入自己的emojis时,我一直无法复制错误。我的iphone上有我自己的emojis,他们不会导致聊天室崩溃。我们联系了使应用程序崩溃的用户,并试图尽可能多地了解他们所做的导致崩溃的信息。 – 2009-09-23 17:06:40

+0

听起来像你很好,然后解决问题的方式。 :) – 2009-09-23 22:12:03

回答

0

这是我如何解决问题。程序现在在将注释插入数据库之前对注释进行解码/编码。

$comment = utf8_decode($comment); 
$comment = utf8_encode($comment); 

我还添加了UTF-8报头添加到动态XML/PHP的饲料:

header('Content-type: text/html; charset=utf-8'); 

的表情符号不显示,这是好的。但该提要现在有效,并且不会使应用程序崩溃。问题解决了。

0

如果我不得不冒险猜测,这是我认为正在发生的事情。机会是你的应用程序不能正确处理unicode。有很多事情可能会发生(假设字符计数==字节计数等),但是如果您将某些unicode字符串发送到您的应用程序,它会崩溃。

iPhone Empoji实现为unicode(使用U + E001-U + E05A的私有代码范围的一部分)。你是不是能够正确地过滤它的原因是采用高unicode的范围内,除非你添加的“u”的字符串末尾的PHP正则表达式引擎不分析传入的字符串:

$special2 = "/[\~\!\@\#\$\%\^\&\*\(\)\_\+\`\-\=\{\}\|\:\\\"\<\>\?\,\.\/\;\'\[\]]/u"; 

这样做,可能有其他意外结果取决于设置的方式,从长远来看,确保您可以正确处理任意Unicode字符串会更好。