我有一个带有法国口音的数组项目([WIPDescription] => RecetteSoupeàlOignonSans Boeuf US)。正在从数据库(mysql)中正确地提取数据。
然而,当我尝试使用json_encode内置的php将其编码为json时,它会产生一个空的json值(OS X服务器:php 5.3.4,启用了json 1.2.1)。
在Linux服务器中,描述在第一个重音字符后被截断。
我尝试了所有json_encode选项但没有成功。有什么建议吗?
谢谢。
答案 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_encode
或utf8_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_encode
或json_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);