tags:

views:

36

answers:

1

I use JSON.stringify() function to stringify JS objects for AJAX sending to PHP.

The problem arises when JSON.stringify function encodes unicode characters to format \uxxxx (eg. \u000a). My question is how to convert those characters to regular unicode characters in PHP?

+1  A: 

See http://stackoverflow.com/questions/3506988/output-utf-16-a-little-stuck/3508040#3508040

This converts to UTF-8:

function unescape_utf16($string) {
    /* go for possible surrogate pairs first */
    $string = preg_replace_callback(
        '/\\\\u(D[89ab][0-9a-f]{2})\\\\u(D[c-f][0-9a-f]{2})/i',
        function ($matches) {
            $d = pack("H*", $matches[1].$matches[2]);
            return mb_convert_encoding($d, "UTF-8", "UTF-16BE");
        }, $string);
    /* now the rest */
    $string = preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
        function ($matches) {
            $d = pack("H*", $matches[1]);
            return mb_convert_encoding($d, "UTF-8", "UTF-16BE");
        }, $string);
    return $string;
}
Artefacto
Parse error: syntax error, unexpected T_FUNCTION in ...Error in the code.
Stazh
@Stazh You are using PHP < 5.3. It's easy to work around, just define named functions and pass a string with their name to preg_replace_callback.
Artefacto
Works great! Thanks!
Stazh