2016-01-23 96 views
0

我有一個子字符串函數的問題。當一個特殊的char是結果子字符串的最後一個字符(只有!!!)時,這個字符被表示爲一個帶有問號的圖標。PHP:特殊字符變成問號圖標子字符串

這裏說到我的代碼:

$string = 'This is a string and when a German word with a special char like "Tür" appears and the special char ü is the last character of the substring it gets represented as an icon with question mark'; 
echo substr($string,0,102). "..."; 

結果:

這是一個字符串,當一個德語單詞包含「TUR」 出現和特殊字符特殊字符..

我該如何避免這種情況?

+0

使用'mb_substr' – Rein

回答

0

聽起來像你正在使用8位字符串函數來處理Unicode字符。這是行不通的。

你應該安裝mbstring包,並在你的php配置中啓用「mbstring function overloading」。這會小心地默認覆蓋所有相關的字符串處理函數,以使用它們的多字節安全等價物,以便您不必更改代碼。

該「mbstring」擴展名有許多配置選項。檢查你的php.ini配置文件並查看它們。您會發現mbstring.func_overload命令,您可能要將其設置爲值7,以便全部這樣的功能被覆蓋。更改該配置後,必須重新啓動http服務器進程,以便加載新配置。您也可以通過在測試腳本中使用着名的phpinfo()函數來檢查。

另一種方法是不配置此重寫automagic,而是手動移植代碼以直接使用這些函數。爲此,您將不得不用代碼中的全部字符串函數調用其等價函數名稱。因此,例如mb_substr(...)而不是隻有substr(...)

另外你真的想開始閱讀你使用的工具的文檔。這裏對這些「多字節字符串」函數的介紹很感興趣。它應該有助於你理解這一切是什麼以及你需要照顧的:http://php.net/manual/en/book.mbstring.php

0

你應該使用mb_substr函數。