7

When I use json_encode to encode my multi lingual strings , It also changes special characters.What should I do to keep them same .

For example

<?
echo json_encode(array('şüğçö'));

It returns something like ["\u015f\u00fc\u011f\u00e7\u00f6"]

But I want ["şüğçö"]

Oguz Bilgic
  • 3,392
  • 5
  • 36
  • 59
  • 1
    This is the solution: http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha – Shehabic Aug 01 '12 at 16:09
  • possible duplicate of [Reference: Why are my "special" Unicode characters encoded weird using json\_encode?](http://stackoverflow.com/questions/22745662/reference-why-are-my-special-unicode-characters-encoded-weird-using-json-enco) – TRiG Jun 27 '14 at 18:11

7 Answers7

8

try it:

<?
echo json_encode(array('şüğçö'), JSON_UNESCAPED_UNICODE);
Deka
  • 1,333
  • 12
  • 14
2

In JSON any character in strings may be represented by a Unicode escape sequence. Thus "\u015f\u00fc\u011f\u00e7\u00f6" is semantically equal to "şüğçö".

Although those character can also be used plain, json_encode probably prefers the Unicode escape sequences to avoid character encoding issues.

Gumbo
  • 643,351
  • 109
  • 780
  • 844
2

PHP 5.4 adds the option JSON_UNESCAPED_UNICODE, which does what you want. Note that json_encode always outputs UTF-8.

Artefacto
  • 96,375
  • 17
  • 202
  • 225
2
  • You shouldn't want this
  • It's definitely possible, even without PHP 5.4.

First, use json_encode() to encode the string and save it in a variable.

Then simply use preg_replace() to replace all \uxxxx with unicode again.

Tom van der Woerdt
  • 29,532
  • 7
  • 72
  • 105
1

json_encode() does not provide any options for choosing the charset the encoding is in in versions prior to 5.4.

Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358
0
<?php

print_r(json_decode(json_encode(array('şüğçö'))));

/*
Array
(   
    [0] => şüğçö
)
*/

So do you really need to keep these characters unescaped in the JSON?

Romain Deveaud
  • 824
  • 5
  • 11
0

Json_encode charset solution for PHP 5.3.3

As JSON_UNESCAPED_UNICODE is not working in PHP 5.3.3 so we have used this method and it is working.

$data = array(
        'text' => 'Päiväkampanjat'
);
$json_encode = json_encode($data);
var_dump($json_encode); // text: "P\u00e4iv\u00e4kampanjat"

$unescaped_data = preg_replace_callback('/\\\\u(\w{4})/', function ($matches) {
    return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT, 'UTF-8');
}, $json_encode);

var_dump($unescaped); // text is unescaped -> Päiväkampanjat
Muhammad Shahzad
  • 9,340
  • 21
  • 86
  • 130