Ваша строка не фактически
$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.
Пожалуйста, проверьте (и опубликуйте), какие ** байты ** содержит ваша строка. Похоже, что по крайней мере некоторые из этих «-» на самом деле являются результатом слияния сущности '& oacute;', а не с кодовой точкой юникода U + 00F3 (в * любой * кодировке). – delnan
Подсказка: PHP не отображает HTML. –
delnan, как? –