You can recompose a Hex-representation by converting the hexadecimal chars with hexdec(), repacking the component chars, and then using mbconvertencoding() to convert from UCS-2 into UTF-8. As I mentioned in my answer to your other question, you'll still need to be careful with the output encoding, although here you've specifically requested UTF-8, so we'll use that for the upcoming sample.
Here's a sample that does the work of converting UCS-2 in Hex to UTF-8 in native string form. As PHP currently doesn't ship with a hex2bin() function, which would make things very easy, we'll use the one posted at the reference link at the end. I've renamed it to local_hex2bin() just in case it conflicts with a future version of PHP or with a definition in some other 3rd party code that you include in your project.
Locally, I called this sample page UCS2HexToUTF8.php, and then used a querystring to set the output.
- function local_hex2bin($h)
- if (!is_string($h)) return null;
- return $r;
- header('Content-Type: text/html; charset=UTF-8');
- echo '<html><head>';
- echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
- echo '</head><body>';
- $querystring = $_SERVER['QUERY_STRING'];
- // NOTE: we could substitute one of the following:
- // $querystring = '06450631062d0628064b06270020063906270644064500200021';
- // $querystring = '00480065006C006C006F';
- $ucs2string = local_hex2bin($querystring);
- // NOTE: The source encoding could also be UTF-16 here.
- // TODO: Should check byte-order-mark, if available, in case
- // 16-bit-aligned bytes are reversed.
- $utf8string = mb_convert_encoding($ucs2string, 'UTF-8', 'UCS-2');
- echo 'query string: '.$querystring.'<br />';
- echo 'converted string: '.$utf8string.'<br />';
- echo '</body>';
You need to login to post a comment.