Получить hex-код HTML-сущностей - PullRequest
       24

Получить hex-код HTML-сущностей

3 голосов
/ 20 сентября 2011

У меня есть строка как "€".

Я хочу преобразовать его в шестнадцатеричный формат, чтобы получить значение "\u20AC", чтобы я мог отправить его на флэш-память.

То же самое для всех символов валюты ..

 £  ->  \u00A3
 $ ->  \u0024
 etc

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

Во-первых, обратите внимание, что $ не является известным объектом в HTML 4.01 .Однако это в HTML 5, а в PHP 5.4 вы можете вызвать html_entity_decode с помощью ENT_QUOTES | ENT_HTML5 для его декодирования.

Вы должны декодировать объект и только затем преобразовать его:

//assumes $str is in UTF-8 (or ASCII)
function foo($str) {
    $dec = html_entity_decode($str, ENT_QUOTES, "UTF-8");
    //convert to UTF-16BE
    $enc = mb_convert_encoding($dec, "UTF-16BE", "UTF-8");
    $out = "";
    foreach (str_split($enc, 2) as $f) {
        $out .= "\\u" . sprintf("%04X", ord($f[0]) << 8 | ord($f[1]));
    }
    return $out;
}

Если вы хотите заменить только сущности, вы можете использовать preg_replace_callback для сопоставления сущностей, а затем использовать foo в качестве обратного вызова.

function repl_only_ent($str) {
    return preg_replace_callback('/&[^;]+;/',
        function($m) { return foo($m[0]); },
    $str);
}

echo repl_only_ent("&euro;foobar &acute;");

дает:

\u20ACfoobar \u00B4
0 голосов
/ 20 сентября 2011

Вы можете попробовать следующую функцию для преобразования строки в гекс:

function strToHex($string) {
    $hex='';
    for ($i=0; $i < strlen($string); $i++) {
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}

С Грег Винярски , который является четвертым хитом в Google .

В сочетании с html_entity_decode () .Итак, что-то вроде этого:

$currency_symbol = "&euro;";
$hex = strToHex(html_entity_decode($currency_symbol));

Этот код не проверен и, следовательно, может потребовать дальнейших изменений для получения точного требуемого результата

...