2014-01-22 29 views
0

我知道mb_是處理UTF8字符,但它不會解決我的問題。php,mb_substr殺死Unicode字符

所以我有這個字符串:

óóóóóóóóóóóóóóóóóóóóóóóóóóóóóóó

mb_substr ($oooo, 0,17, 'UTF-8'); 

óóóóóóóóóóóóóóóóó& OAC

所以最後一個字符damag ES。

+2

請檢查(和張貼)您的字符串包含哪些**字節**。看起來,這些「ó」中的至少一些實際上是實體轉義的結果,而不是unicode代碼點U + 00F3(in *任何*編碼)。 – delnan

+1

提示:PHP不會呈現HTML。 –

+0

delnan,怎麼樣? –

回答

3

你的字符串實際上

$str = 'óóóóóóóóóóóóóóóóóóóóóóóóóóóóóóó'; 

您的字符串實際上是:

$str = 'óóóóóóóó...'; 

當在瀏覽器看,瀏覽器當然會呈現「O」,但是這是對PHP沒有興趣。

最好的解決方案是讓你的內容進入實際的UTF-8編碼字符「óóóóóóóóóóóóóóó」,然後使用你的代碼。要對您的當前字符串這項工作,您需要將HTML實體首先解碼:

$str = 'óóóóóóóó...'; 
$str = html_entity_decode($str, ENT_COMPAT, 'UTF-8'); 
echo mb_substr($str, 0, 17, 'UTF-8'); 

你會那麼當然需要採取的輸出編碼的小心,因爲你現在實際輸出UTF-8瀏覽器需要了解的內容。請參閱UTF-8 all the way through