If you have an ANSI encoded string, using utf8_encode() is
the wrong function to deal with this. You need to properly convert it from ANSI to UTF-8 first. That will certainly reduce the number of Unicode escape sequences like \u0082 from
the json output, but technically these sequences are valid for json, you must not fear them.
Converting ANSI to UTF-8 with PHPjson_encode works
with UTF-8 encoded
strings only. If you need to create valid json successfully
from an ANSI encoded
string, you need to re-encode/convert it to UTF-8 first.
Then json_encodewill
just work as documented.To convert an encoding from ANSI (more
correctly I assume you have a Windows-1252 encoded
string, which is popular but wrongly referred to as ANSI)
to UTF-8 you
can make use of the mb_convert_encoding() function:$str = mb_convert_encoding($str,"UTF-8","Windows-1252");Another function in PHP that can convert the encoding / charset of a string is called iconv based
onlibiconv. You can use it as well:$str = iconv("CP1252","UTF-8", $str);Note on utf8_encode()utf8_encode() does
only work for Latin-1,
not for ANSI.
So you will destroy part of your characters inside that string when you run it through that function.Related: What is ANSI format?For a more fine-grained control of what json_encode() returns,
see the list of predifined constants(PHP version dependent, incl. PHP 5.4, some constants
remain undocumented and are available in the source code only so far).Changing the encoding of an array/iteratively (PDO comment)As you wrote in a comment that you have problems to apply the function onto an array, here is some code example. It's always needed to first change
the encoding before using json_encode.
That's just a standard array operation, for the simpler case of pdo::fetch() a foreach iteration:while($row = $q->fetch(PDO::FETCH_ASSOC)){foreach($row as&$value){
$value = mb_convert_encoding($value,"UTF-8","Windows-1252");}
unset($value);# safety: remove reference
$items[]= array_map('utf8_encode', $row );}
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn