medk
medk

Reputation: 9549

json with special characters like é

I'm developing a dependent select script using jQuery, PHP and JSON as the response.

Everything goes well except for using special characters like French ones (é , è , à...)

if I pre-encode them like (é , è , à) (Here I'm using spaces between the ampersand and the rest of the word to prevent auto encoding in my question) it works but when rendered with jquery the characters are not converted to what they should look like (é...), instead they are shown as is (é)

If I write them like (é) and don't pre-encode them the full value in this array entry is not shown.

What should I do here?

Thanks.

Upvotes: 20

Views: 58515

Answers (3)

YvonBlais
YvonBlais

Reputation: 125

Just like the first anwser

Do you use a database? If Yes, make sure the database table is declared UFT8 How is declared the HTML page? UTF-8 IS the string in the PHP script file? If yes, make sure the file has a UTF-8 file format

You could also use utf8_encode (to send to HTML) and utf8_decode (to receive) but not the right way

Upvotes: 6

rharvey
rharvey

Reputation: 2005

This worked for me, hopefully it will work for anyone else experiencing similar issues.

$title = 'é';
$title = mb_convert_encoding($title, "UTF-8", "HTML-ENTITIES");

header('Content-Type: application/json; Charset="UTF-8"');
echo json_encode(array('title' => $title));

The mb_convert_encoding function takes a value and converts it from (in this case) HTML-ENTITIES to UTF-8.

See here for me details on the function http://php.net/manual/en/function.mb-convert-encoding.php

Upvotes: 7

Tomalak
Tomalak

Reputation: 338326

If I write them like (é) and don't pre-encode them the full value in this array entry is not shown.

What should I do here?

In JSON you do not HTML-encode values. You send them literally (é) and set set Content-Type correctly:

header('Content-Type: application/json; Charset=UTF-8');

Declare the encoding your data is in, of course.

Upvotes: 10

Related Questions