Php 获取html实体的代码

Php 获取html实体的代码,php,flash,unicode,hex,Php,Flash,Unicode,Hex,我有一个字符串“&euro;” 我想将其转换为十六进制,以获得值“\u20AC”,这样我就可以将其发送到flash 所有货币符号均相同 &pound; -> \u00A3 &dollar; -> \u0024 etc 您可以尝试以下函数进行字符串到十六进制的转换: function strToHex($string) { $hex=''; for ($i=0; $i < strlen($string); $i++) {

我有一个字符串“
&euro;

我想将其转换为十六进制,以获得值
“\u20AC”
,这样我就可以将其发送到flash

所有货币符号均相同

 &pound;  ->  \u00A3
 &dollar; ->  \u0024
 etc

您可以尝试以下函数进行字符串到十六进制的转换:

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

此代码未经测试,因此可能需要进一步修改以返回所需的准确结果。首先,请注意
&dollar不是一个简单的名称。然而,在HTML5中,在PHP5.4中,您可以使用
ENT\u引号调用
HTML\u entity\u decode
对其进行解码

您必须解码实体,然后才能转换它:

//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;
}
给出:

\u20ACfoobar \u00B4
\u20ACfoobar\u00B4-1仅适用于代码点顺便说一句,在PHP5.4中,当html_entity_decode的默认值为UTF-8而不是ISO-8859-1时,它会失败得更厉害。我的PHP版本是5.1.6…它在mb_convert_编码中显示了致命错误…我如何获取值请@PRA如果您愿意,您可以使用iconv而不是mbstring。如果您没有iconv,则必须手动将UTF-8转换为UTF-16。我已尝试iconv(),但无法识别要转换十六进制的字符集类型
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