2014-01-22 2 views
0

Я знаю, что mb_ предназначен для работы с utf8-символами, но это не решит мою проблему.php, mb_substr убивает символы unicode

Так у меня есть эта строка:

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

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

óóóóóóóóóóóóóóóóó & OAc

поэтому последний damag характер эс.

+2

Пожалуйста, проверьте (и опубликуйте), какие ** байты ** содержит ваша строка. Похоже, что по крайней мере некоторые из этих «-» на самом деле являются результатом слияния сущности '& oacute;', а не с кодовой точкой юникода U + 00F3 (в * любой * кодировке). – delnan

+1

Подсказка: PHP не отображает HTML. –

+0

delnan, как? –

ответ

3

Ваша строка не фактически

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

Ваша строка на самом деле:

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

Когда смотрел на в браузере, то браузер будет, конечно, делают «ó», но это из никакого интереса к 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.

Смежные вопросы