2009-09-23 52 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字符串會更好。