php json_decode utf8,关于utf 8:PHP json_encode json_decode UTF-8

如何将包含国际字符的JSON编码字符串保存到数据库中,然后在浏览器中解析解码后的字符串?

$string ="très agréable";

// to the database

$j_encoded = json_encode(utf8_encode($string));

// get from Database

$j_decoded = json_decode($j_encoded);

?>

= $j_decoded ?>

就像你展示的那样。什么不起作用?

它给了我:Tr&195;?Â;&168;S Agr&195;?Â;&169;能够

@您的php文件是否保存为utf-8?(通常在"另存为…"对话框中有一个选项)文档是否用作UTF-8?您可以使用meta标记来测试:。

尝试将页面的字符集设置为utf-8…块中的

是的,在bbedit中,我将其保存为:unicode(utf-8,无bom)

@马克,这很有效,但只有在使用$J_encoded=json_encode($string)时才有效;所以没有utf8_encode()。

@ffish在你的代码中去掉了utf8_encode(),我看到了(编辑:啊,你更快了)

json utf8编码和解码:

json_encode($data, JSON_UNESCAPED_UNICODE)

json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)

强制utf8也可能有帮助:http://pastebin.com/2xkqyu49

为什么给负号?我有足够的情况下,这是唯一有效的方法。不要告诉我有关文件、数据库等编码的所有信息。有些情况下,您不知道资源的编码,它是随机的。一些utf8,一些你能想象的任何其他。

唯一对我起作用的是,我正在构建一个API,我需要将响应纯打印为带有编码字符的JSON

谢谢卢卡斯,这正是我要找的。它将编码(如\u00e9转换为é)。我刚刚在php文档中确认了它的用法(示例2)。不过,我还是很好奇,depth参数真的有用吗?如果递归在某个深度停止,这是否意味着JSON将不会根据位掩码完全打开/解码?

另见此答案,使用JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES。

header('Content-Type: application/json; charset=utf-8');

这是一个编码问题。在某种程度上,数据被表示为ISO-8859-1。

流程的每个部分都需要使用UTF-8编码。

数据库连接

数据库表

您的PHP文件(如果您在该文件中使用特殊字符,如上面的示例所示)

您输出的content-type头文件

我认为这是最好的答案,我需要检查我的数据库编码!

您可以添加完成所有这些任务所需的代码。

如果源文件已经是utf8,则删除utf8_u*函数。php5将字符串存储为字节数组。

您应该为HTML中的编码添加一个元标记,并且应该添加一个HTTP头,它将transferEncoding设置为utf-8。

在PHP中

header('Content-Type: text/html; charset=utf-8');

尝试发送utf-8字符集标题:

HTML元:

utf8解码$j_decoded = utf8_decode(json_decode($j_encoded));编辑或者更准确地说,$j_encoded = json_encode($j_encoded);$j_decoded = json_decode($j_encoded);不需要en/解码utf8

埃多克斯1〔3〕

为什么在utf-8环境中需要utf8_decode()(转换为iso-8859-1)?

好的,我明白了。我还得用utf8解码。utf8_解码(json_解码($j_编码))与json_解码(utf8_解码($j_编码))有区别吗?

是的,没错,你无论如何都不应该使用utf8_encode。但你使用的方式是警察。1您先编码utf8,然后编码json,为了得到输入,您必须先解码json,然后再编码utf8。

@如果你把编码搞砸了(见utf8_encode),你就必须纠正它。好吧,别搞砸了,编码也是个解决方案,我已经编辑了我的答案来反映这一点。

对我来说两种方法

header('Content-Type: text/html; charset=utf-8');

echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);

为我工作:)

function jsonEncodeArray( $array ){

array_walk_recursive( $array, function(&$item) {

$item = utf8_encode( $item );

});

return json_encode( $array );

}

谢谢,这为我指明了方向,只是它一开始让事情变得更糟!:)然后我意识到这是因为显然在堆栈的某个更深的地方"过度编码"了一些东西,所以——也许很奇怪——将utf8_encode改为utf8_decode解决了这个问题。

这个解决方案对我非常有效,而且是唯一一个…

如果您得到"意外字符"错误,您应该检查是否有一个BOM(字节顺序标记保存到您的UTF-8JSON中)。您可以删除第一个字符,也可以在没有BOM的情况下保存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值