I have a string as "€
".
I want to convert it to hex to get the value as "\u20AC"
so that I can send it to flash.
Same for all currency symbol..
£ -> \u00A3
$ -> \u0024
etc
First, note that $
is not a known entity in HTML 4.01. It is, however, in HTML 5, and, in PHP 5.4, you can call html_entity_decode
with ENT_QUOTES | ENT_HTML5
to decode it.
You have to decode the entity and only then convert it:
//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;
}
If you want to replace only the entities, you can use preg_replace_callback
to match the entities and then use foo
as a callback.
function repl_only_ent($str) {
return preg_replace_callback('/&[^;]+;/',
function($m) { return foo($m[0]); },
$str);
}
echo repl_only_ent("€foobar ´");
gives:
\u20ACfoobar \u00B4
You might try the following function for string to hex conversion:
function strToHex($string) {
$hex='';
for ($i=0; $i < strlen($string); $i++) {
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
From Greg Winiarski which is the fourth hit on Google.
In combination with html_entity_decode(). So something like this:
$currency_symbol = "€";
$hex = strToHex(html_entity_decode($currency_symbol));
This code is untested and therefore may require further modification to return the exact result you require