Emojis导致iphone崩溃

时间:2009-09-23 14:39:29

标签: php iphone objective-c

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

这是我的服务器脚本中的正则表达式过滤器,它禁止使用特殊字符的注释:

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

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

上面的PHP语句说如果脚本发现的字符不是[A-z] [0-9]而没有列出标点符号之一,那么就拒绝评论。

最近破坏该应用的评论如下:

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

有关如何防止应用崩溃的任何建议?

2 个答案:

答案 0 :(得分:0)

如果我不得不冒险猜测,这就是我的想法。有可能你的应用程序无法正确处理unicode。有许多事情可以进行(假设字符数= =字节数等),但如果你得到某些发送到你的应用程序的unicode字符串就会崩溃。

iPhone Empoji实现为unicode(使用U + E001-U + E05A的部分私有代码范围)。您无法正确过滤它的原因是PHP regexp引擎不使用高unicode范围解析传入的字符串,除非您在字符串末尾附加“u”:

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

这可能会产生其他意想不到的后果,具体取决于设置的确切方式,从长远来看,确保您可以正确处理任意unicode字符串会更好。

答案 1 :(得分:0)

以下是我解决问题的方法。程序现在在将注释插入数据库之前对注释进行解码/编码。

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

我还在动态xml / php feed中添加了一个utf-8标头:

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

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