2014-01-22 28 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