如何将包含国际字符的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的情况下保存。