Revision: 22923
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 26, 2010 00:35 by etangle
Initial Code
<?php function local_hex2bin($h) { if (!is_string($h)) return null; $r=''; for ($a=0; $a<strlen($h); $a+=2) { $r.=chr(hexdec($h{$a}.$h{($a+1)})); } return $r; }; header('Content-Type: text/html; charset=UTF-8'); mb_http_output('UTF-8'); echo '<html><head>'; echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'; echo '</head><body>'; echo 'output encoding: '.mb_http_output().'<br />'; $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>'; ?>
Initial URL
http://stackoverflow.com/questions/2005358/ucs2-hexencoded-characters-to-utf8-in-php
Initial Description
You can recompose a Hex-representation by converting the hexadecimal chars with hexdec(), repacking the component chars, and then using mb_convert_encoding() 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. UCS2HexToUTF8.php?06450631062d0628064b06270020063906270644064500200021
Initial Title
UCS2/HexEncoded characters to UTF8 in php
Initial Tags
Initial Language
PHP