The Badge
The Badge

Reputation: 38

text encoding in php response

i'm trying to print a JSON in Hebrew and only get utf-8 encoded string. how can I make sure the client's browser shows the string in Hebrew?

the code is:

<html>
 <head>
  <meta charset=utf-8" />
 </head>
<body>
<?php 
     header('Content-Type: text/html; charset=utf-8');
    $response = array();
    require_once __DIR__.'/db_connect.php';
    $db = new DB_CONNECT();

    $result = mysql_query(" SELECT * FROM stores") or die(mysql_error());

    if (mysql_num_rows($result)>0){
        $response["stores"]=array();

        while($row = mysql_fetch_array($result)){
            $store = array();
            $store["_id"]=$row["_id"];
            $store["name"]=$row["name"];
            $store["store_type"]=$row["store_type"];

            array_push($response["stores"],$store);

        }
        $response["success"] = 1;
        $string =  utf8_encode(json_encode($response));
        echo hebrevc($string);    
    }else{
        $response["success"]=0;
        $response["message"]="No stores found";
        echo utf8_encode(json_encode($response));
    }
    ?>


 </body>
</html>

and the response is:

{{"stores":[{"_id":"1","name":"\u05d7\u05ea\u05d5\u05dc\u05d9","store_type":"\u05de\u05e1\u05e2\u05d3\u05ea \u05d1\u05e9\u05e8\u05d9\u05dd"},{"_id":"2","name":"\u05de\u05e2\u05d3\u05e0\u05d9 \u05de\u05d0\u05de\u05d9","store_type":"\u05de\u05e1\u05e2\u05d3\u05d4 \u05dc\u05e8\u05d5\u05e1\u05d9\u05dd"}],"success":1

Upvotes: 0

Views: 2891

Answers (2)

Yotam Omer
Yotam Omer

Reputation: 15356

A nice constant was added in PHP 5.4: JSON_UNESCAPED_UNICODE

Using it will not escape your Hebrew characters.

echo json_encode($response, JSON_UNESCAPED_UNICODE);

Check out the json_encode reference.

Upvotes: 3

Alastair McCormack
Alastair McCormack

Reputation: 27704

The result looks like a UCS-2 string. Try setting the charset of the Mysql Connection:

mysql_set_charset('utf8', $conn)

then remove the utf8_encode statements

Upvotes: 0

Related Questions