Emojis导致iPhone崩溃
问题描述:
我们的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its all about the î§ go Team!!</comment>
就做什么,以防止应用程序崩溃有什么建议?
答
这是我如何解决问题。程序现在在将注释插入数据库之前对注释进行解码/编码。
$comment = utf8_decode($comment);
$comment = utf8_encode($comment);
我还添加了UTF-8报头添加到动态XML/PHP的饲料:
header('Content-type: text/html; charset=utf-8');
的表情符号不显示,这是好的。但该提要现在有效,并且不会使应用程序崩溃。问题解决了。
答
如果我不得不冒险猜测,这是我认为正在发生的事情。机会是你的应用程序不能正确处理unicode。有很多事情可能会发生(假设字符计数==字节计数等),但是如果您将某些unicode字符串发送到您的应用程序,它会崩溃。
iPhone Empoji实现为unicode(使用U + E001-U + E05A的私有代码范围的一部分)。你是不是能够正确地过滤它的原因是采用高unicode的范围内,除非你添加的“u”的字符串末尾的PHP正则表达式引擎不分析传入的字符串:
$special2 = "/[\~\!\@\#\$\%\^\&\*\(\)\_\+\`\-\=\{\}\|\:\\\"\<\>\?\,\.\/\;\'\[\]]/u";
这样做,可能有其他意外结果取决于设置的方式,从长远来看,确保您可以正确处理任意Unicode字符串会更好。
找出*什么*会崩溃应用程序会更有意义吗?而不是在PHP中周围?你的应用程序有一个bug,一个漏洞,你需要修复_that_,并且我们没有任何细节可以帮助你。 – 2009-09-23 17:00:28
是的。当我在聊天室中输入自己的emojis时,我一直无法复制错误。我的iphone上有我自己的emojis,他们不会导致聊天室崩溃。我们联系了使应用程序崩溃的用户,并试图尽可能多地了解他们所做的导致崩溃的信息。 – 2009-09-23 17:06:40
听起来像你很好,然后解决问题的方式。 :) – 2009-09-23 22:12:03