php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #49588 json_encode returns null for certain strings
Submitted: 2009-09-18 12:36 UTC Modified: 2009-09-18 13:29 UTC
From: fernando at consultorpc dot com Assigned:
Status: Not a bug Package: JSON related
PHP Version: 5.3.0 OS: Linux/Mac OSX Leopard
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: fernando at consultorpc dot com
New email:
PHP Version: OS:

 

 [2009-09-18 12:36 UTC] fernando at consultorpc dot com
Description:
------------
At my specific case, if a string contains an Euro symbol ( ? ), json_encode will return null for that string.

It might also happens with other special characters.

Reproduce code:
---------------
<?php

$array = array(
        'name' => htmlentities( 'My euro symbol ?.' )
);

var_dump( $array );
var_dump( json_encode( $array ) );

Expected result:
----------------
array(1) {
  ["name"]=>
  string(29) "My euro symbol &euro;."
}
string(13) "{"name":"My euro symbol &euro;."}"

Actual result:
--------------
array(1) {
  ["name"]=>
  string(29) "My euro symbol &acirc;?&not;."
}
string(13) "{"name":null}"

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-09-18 12:54 UTC] jani@php.net
PHP Warning:  json_encode(): Invalid UTF-8 sequence in argument in Command line code on line 1
 [2009-09-18 13:29 UTC] scottmac@php.net
It only appears of display_errors is on though with 5.3.1+ you can also detect it by looking at json_last_error()
 [2010-04-01 15:13 UTC] arievanziel at gmail dot com
json_encode returns null for a string with é or (for example) ä in it.

Reproduce code:

$test = "é";
echo $test;
echo json_encode($test);

A possible workaround could be to use (especially if you will use the 
json_encode string as html output):

$test = "é";
$test = htmlentities($test, UTF-8);
echo $test;
echo json_encode($test);
 [2010-04-07 13:21 UTC] pcdinh at gmail dot com
Hi arievanziel,

In your case, the character 'é' may be encoded in 'latin1'. If you save the code in a UTF-8 encoded file you will find that the result will be 

&eacute;"&eacute;"

as expected
 [2010-12-27 23:19 UTC] gtrujillos at gmail dot com
A use full solution:

http://efreedom.com/Question/1-2790027/UTF-Character-Encoding-Battles-Json-Encode
 [2010-12-27 23:20 UTC] gtrujillos at gmail dot com
A useful solution:

http://efreedom.com/Question/1-2790027/UTF-Character-Encoding-Battles-Json-Encode
 [2012-07-02 16:58 UTC] gudjonj at gmail dot com
To return null if encoding is incorrect makes no sense.
 [2013-10-28 17:09 UTC] herrero dot olivari at gmail dot com
I had the same problem and solved it using utf8_encode...

the weird thing is I'm fetching information from the database that is in UTF8
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Nov 24 23:01:32 2024 UTC