2012-01-31 41 views
0

是否有可能檢測到用戶的字符串的字符集?PHP - 檢測用戶提供的字符的字符集

如果沒有,何談下一個問題..

是否有可靠內置PHP函數,可以準確地告訴我們,如果用戶提供的字符串(無論是提供直通GET/POST /餅乾等),是否在UTF-8或不?換句話說,我可以這樣做

is_utf8($ _ GET [ 'FIRST_NAME'])

反正是有這個功能可能會產生一個TRUE其中,在現實中FIRST_NAME在UTF-8是不是?

+0

請upvote並接受你以前的問題的答案(這也是)。請參閱http://stackoverflow.com/faq#reputation。 – deceze 2012-01-31 04:03:06

回答

1

關於1:

你可以給mb_detect_encoding一試,但它幾乎是在黑暗中拍攝。 「編碼」字符串只是一堆字節。這種字節序列在許多不同的編碼中通常同樣有效。因此,根據定義,不可能檢測到未知編碼可靠,你只能猜測。由於這個原因,存在元信息,例如應該傳送傳輸內容的編碼的HTTP標題。檢查這些是否可用。

關於2:

mb_check_encoding($var, 'UTF-8')會告訴你該字符串是否是一個合法的UTF-8字符串。據我所見,在PHP的最新版本中,它完成了它所說的任務。這仍然不意味着字符串必然是一個UTF-8字符串,它只是意味着字節序列的順序在UTF-8中是有效的。

+0

假設傳入的字符串在utf-8中並對其進行解碼,那麼該怎麼辦?如果結果相符,我們可以有把握地得出結論:假設是正確的,它的行爲是用utf-8編碼的?所以在PHP中,如果我做了以下事情,它返回TRUE,那麼這將是驗證它是否爲UTF-8的好方法嗎? if($ _GET ['name'] == utf8_decode($ _ GET ['name']) – 2012-01-31 15:23:28

+0

@John不,這是廢話。 – deceze 2012-01-31 22:43:18

+0

我們是否說PHP世界中沒有任何東西,因爲我們今天的立場是驗證用戶輸入是否在utf-8中?我如何確保我可以正確地爲當前用戶strig逃脫/消毒?我的逃生/消毒過濾器都是爲處理utf-8而設計的。 – 2012-02-01 02:08:09