2013-08-20 21 views
0

我試圖確定我的字符串是否包含UTF-8 replacement character檢查UTF-8替換字符

目前我有兩次失敗的嘗試。

第一次嘗試:

stristr($string, "\xEF\xBF\xBD") 

第二次嘗試這些作品的

preg_match("#\xEF\xBF\xBD#i", $string) 

無。

問題是,我如何檢查我的字符串替換字符?

+1

第一次嘗試工作,假設'$ string'以UTF-8編碼。你爲什麼說它不? – Joni

+0

@Joni雖然我可以在輸出中看到替換字符,但它返回false。 – Repox

+0

'$ string'是否正確編碼爲UTF-8?請記住,PHP字符串可以包含任意的二進制數據,如果'$ string'包含UTF-8中不合法的字節序列,那麼當輸入有其他內容時,輸出可能會顯示替換字符。 – Joni

回答

0

如果你打算用這個只是爲了看看是否有不可見的字符串中的字符,你可以使用這樣的事情:

if (strlen($string) != strlen(iconv("UTF-8", "UTF-8//IGNORE", $string))) 
    echo "This string has invisible characters"; 

在你的問題的方法也應該工作,但它需要該字符串的字符編碼實際上是UTF-8。在檢查字符是否存在之前,可以使用iconv將字符串從其編碼轉換爲UTF-8。

另外:可能你會想要使用這個字符的多字節符號,這是\ uFFFD代替。然而,PHP默認不支持此功能,這意味着你將不得不使用一些技巧是這樣的:對here

mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES'); 

更多信息。

-1
<?php 
if (mb_detect_encoding($str, "UTF-8") !== FALSE) { 
    // $str is UTF-8 encoded 
} else { 
    // $str is not UTF-8 encoded 
} 

請參考this