如何用法语口音json_encode数组?

Nat*_*ran 25 php mysql json character-encoding

我有一个带有法国口音的数组项目([WIPDescription] => RecetteSoupeàlOignonSans Boeuf US).正在从数据库(mysql)中正确地提取数据.

但是,当我尝试使用json_encode中内置的php将其编码为json时,它会生成一个空的json值(OS X服务器:php 5.3.4,启用了json 1.2.1).

在Linux服务器中,描述在第一个重音字符后被截断.

我尝试了所有json_encode选项但没有成功.有什么建议?

谢谢.

小智 31

我发现这是处理它的最简单方法

echo json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
Run Code Online (Sandbox Code Playgroud)

JSON_PRETTY_PRINT - make是可读的
JSON_UNESCAPED_UNICODE - 正确编码字符
JSON_UNESCAPED_SLASHES - 摆脱转义斜杠'\'
也注意到这些选项由管道'|'分隔

  • 正是我需要的! (5认同)
  • 你是我的英雄!:d (3认同)
  • JSON_UNESCAPED_UNICODE 是从数据库中检索 utf-8 字符串时使用的选项;它在尝试编码时解决了我的问题,仅用“?”替换了特殊字符。 (2认同)

Wri*_*ken 16

json_encode 只想要utf-8.根据您的字符集,您可以使用iconv调用变量之前使用.可能与.utf8_encode json_encodearray_walk_recursive

根据要求,一种未完成的方式来改变数组,假设(1)它不包含对象,(2)数组键在ascii/lower bounds中,因此可以保留原样:

$current_charset = 'ISO-8859-15';//or what it is now
array_walk_recursive($array,function(&$value) use ($current_charset){
     $value = iconv('UTF-8//TRANSLIT',$current_charset,$value);

});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.当我使用mysql_query("SET NAMES'utf8'",$ Connection)时; 它工作正常.(我确实意识到我必须使用mysql_set_character_set()函数才能正确执行此操作.) (3认同)

sde*_*ont 11

另一种解决方案是使用htmlentitiesutf8_encode在使用之前json_encode传递编码的char

像这样:

   $array = array('myvalue' => utf8_encode('ééàà'));
   return json_encode($array);
Run Code Online (Sandbox Code Playgroud)

或使用htmlentities:

   $array = array('myvalue' => htmlentities('ééàà'));
   return json_encode($array);
Run Code Online (Sandbox Code Playgroud)


Mik*_*ant 6

<? 

$sql=mysql_query("SELECT * FROM TABLE...");

while($row=mysql_fetch_array($sql))
{
    $output[]=array_map("utf8_encode", $row);
}
print(json_encode($output));
mysql_close();

?>
Run Code Online (Sandbox Code Playgroud)