我有一個字符串爲「€
」。獲取html實體的十六進制代碼
我想將其轉換爲十六進制以獲得值爲"\u20AC"
,以便我可以將它發送到閃存。
同樣爲所有貨幣符號..
£ -> \u00A3
$ -> \u0024
etc
我有一個字符串爲「€
」。獲取html實體的十六進制代碼
我想將其轉換爲十六進制以獲得值爲"\u20AC"
,以便我可以將它發送到閃存。
同樣爲所有貨幣符號..
£ -> \u00A3
$ -> \u0024
etc
首先,請注意$
不是known entity in 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("€foobar ´");
給出:
\u20ACfoobar \u00B4
你可以嘗試爲字符串下面的函數來進制轉換:
function strToHex($string) {
$hex='';
for ($i=0; $i < strlen($string); $i++) {
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
從Greg Winiarski這是fourth hit on Google。
結合html_entity_decode()。因此,像這樣:
$currency_symbol = "€";
$hex = strToHex(html_entity_decode($currency_symbol));
此代碼是未經測試,因此可能需要進一步修改,返回確切的結果,你需要
我的PHP版本是5.1.6 ...它在mb_convert_encoding顯示致命錯誤...我怎麼能得到值... – Priya
@PRADEEP見http://php.net/manual/en/mbstring.installation .php – Treffynnon
@PRA如果您願意,您可以使用iconv而不是mbstring。如果您還沒有iconv,則必須手動將UTF-8轉換爲UTF-16。 – Artefacto