У меня была проблема, когда мне нужно преобразовать строку (utf-8 по умолчанию) с кириллицей в сущности частично - только кириллица.
Наконец, мне нужно получить JSON-подобный результат, например:
<li class="my_class">City - Mocsow (Москва)</li>
к этому:
<li class=\"my_class\">City - Mocsow (\u041c\u043e\u0441\u043a\u0432\u0430)<\/li>
Итак, я получил комплексное решение (смесь подчиненного автора и Nus):
function strToHex($string){
$enc="utf-8";
$hex = '';
for ($i = 0; $i < mb_strlen ($string, $enc); $i++){
$id = ord (mb_substr ($string, $i, 1, $enc));
$hex .= ($id <= 128) ? mb_substr ($string, $i, 1, $enc) : toCodePoint(mb_substr ($string, $i, 1, $enc), $enc);
}
return $hex;
}
function toCodePoint($string, $encoding){
$utf32 = mb_convert_encoding( $string, 'UTF-32', $encoding );
$length = mb_strlen( $utf32, 'UTF-32' );
$result = Array();
for( $i = 0; $i < $length; ++$i )$result[] = "\u".substr(bin2hex( mb_substr( $utf32, $i, 1, 'UTF-32' ) ), 4,8);
return implode("", $result);
}
$output=strToHex(
str_replace( // this is for json compatible
array("\"", "\n", "\r", "\t", "/"),
array('\"', '\n', "", " ", "\/"),
$text
)
);
echo $output;
Проверено на php 5.2.17:)