如何用法语口音json_encode数组?

时间:2011-08-03 15:24:34

标签: php mysql character-encoding json

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

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

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

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

谢谢。

7 个答案:

答案 0 :(得分:28)

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

class Fblog extends CI_Controller {
    public function __constract(){
    parent:: __constract();
    $this->load->library("facebook",array(
        "appId"=>"xxxxxxxxxxxxxxx",
        "secret"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ));
    }
    public function index(){
        echo $this->facebook->getLoginUrl();
    }
}

JSON_PRETTY_PRINT - make可读 JSON_UNESCAPED_UNICODE - 正确编码字符
JSON_UNESCAPED_SLASHES - 摆脱逃避斜线' \'
另请注意,这些选项由管道' |'

分隔

答案 1 :(得分:16)

json_encode只想要utf-8。根据您的字符集,您可以在调用变量iconv之前使用json_encodeutf8_encode 。可能与array_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);

});

答案 2 :(得分:10)

另一种解决方案是在使用htmlentities传递编码字符

之前使用utf8_encodejson_encode 像这样:

   $array = array('myvalue' => utf8_encode('ééàà'));
   return json_encode($array);

或使用htmlentities

   $array = array('myvalue' => htmlentities('ééàà'));
   return json_encode($array);

答案 3 :(得分:4)

<? 

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

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

?>

答案 4 :(得分:1)

根据PHP docs

  

此功能仅适用于UTF-8编码数据。

答案 5 :(得分:1)

$json = utf8_encode($string);

$json = json_decode($json);

答案 6 :(得分:1)

如果您处理变音符号,还可以添加JSON_PARTIAL_OUTPUT_ON_ERROR,它将仅消除问题,其余部分保持不变。在发现之前,我曾用过utf_encode,但它却把变音符号弄得一团糟。

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR);