我们的iphone应用程序有一个聊天室,用户可以在那里发表评论。最近,聊天室的应用程序崩溃了,因为用户在评论中添加了表情符号。我转到我的服务器PHP脚本,不允许不在A-z0-9范围内的字符(我也允许大约30个标点符号字符),希望这可以防止应用程序/提要崩溃。然而,聊天室里仍然充斥着表情符号。
这是我的服务器脚本中的正则表达式过滤器,它不允许使用特殊字符的注释:
$special = "/\W/";
$special2 = "/[\~\!\@\#\$\%\^\&\*\(\)\_\+\`\-\=\{\}\|\:\\\"\<\>\?\,\.\/\;\'\[\]]/";
if ((preg_match($special,$comment)) && (!preg_match($special2,$comment)))上面的PHP语句表示,如果脚本发现一个字符不是A-z,并且不是所列出的标点符号之一,则拒绝注释。
最近破坏了这款应用的评论如下:
<comment>Exciting timesits all about the î§ go Team!!</comment>关于如何防止应用程序崩溃有什么建议吗?
发布于 2009-09-25 15:01:35
下面是我是如何解决这个问题的。现在,程序在将注释插入数据库之前对其进行解码/编码。
$comment = utf8_decode($comment);
$comment = utf8_encode($comment); 我还在动态xml/php提要中添加了一个utf-8头:
header('Content-type: text/html; charset=utf-8'); 表情符号不显示,这是正常的。但是提要现在是有效的,并且不会使应用程序崩溃。问题解决了。
发布于 2009-09-24 15:14:14
如果要我大胆猜测,我认为是这样的。您的应用程序可能无法正确处理unicode。可能发生的事情有很多种(假设字符数、==字节数等),但是如果你将某些unicode字符串发送到你的应用程序,它就会崩溃。
iPhone Empoji被实现为unicode (使用U+E001-U+E05A的部分私有代码范围)。无法正确过滤它的原因是PHP regexp引擎不会解析使用高unicode范围的传入字符串,除非您将"u“附加到字符串的末尾:
$special2 = "/[\~\!\@\#\$\%\^\&\*\(\)\_\+\`\-\=\{\}\|\:\\\"\<\>\?\,\.\/\;\'\[\]]/u";这样做可能会有其他意想不到的后果,具体取决于设置的具体方式,从长远来看,确保您可以正确处理任意unicode字符串会更好。
https://stackoverflow.com/questions/1466425
复制相似问题