PHP json_编码json_解码UTF-8
如何将带有国际字符的json编码字符串保存到数据库中,然后在浏览器中解析解码后的字符串PHP json_编码json_解码UTF-8,php,utf-8,json,Php,Utf 8,Json,如何将带有国际字符的json编码字符串保存到数据库中,然后在浏览器中解析解码后的字符串 <?php $string = "très agréable"; // to the database $j_encoded = json_encode(utf8_encode($string)); // get from Database $j_decoded = json_decode($j_encoded); ?>
<?php
$string = "très agréable";
// to the database
$j_encoded = json_encode(utf8_encode($string));
// get from Database
$j_decoded = json_decode($j_encoded);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<?= $j_decoded ?>
</html>
$j_decoded=utf8_解码(json_解码($j_编码))代码>编辑
或者更准确地说,$j_encoded=json_encode($j_encoded)
$j_decoded=json_decode($j_encoded)代码>无需en/解码utf8
这是一个编码问题。看起来在某一点上,数据被表示为ISO-8859-1 流程的每个部分都需要UTF-8编码
- 数据库连接
- 数据库表
- 您的PHP文件(如果您在该文件中使用特殊字符,如上面的示例所示)
- 您输出的
标题内容类型
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
在php中
<?php
header('Content-Type: text/html; charset=utf-8');
尝试发送UTF-8字符集头:
<?php header ('Content-type: text/html; charset=utf-8'); ?>
以及HTML元数据:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
json utf8编码和解码:
json_encode($data, JSON_UNESCAPED_UNICODE)
json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)
强制utf8也可能有帮助:如果出现“意外字符”错误,则应检查是否有BOM(字节顺序标记)保存到utf-8 json中。
您可以删除第一个字符,如果没有BOM,也可以保存。为我工作:)
对我来说,这两种方法都适用
<?php
header('Content-Type: text/html; charset=utf-8');
echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
我也有同样的问题。这可能因您将数据放入数据库的方式而异,但请尝试适合我的方法:
$str = json_encode($data);
$str = addslashes($str);
在将数据保存到数据库之前,请执行此操作。与您显示的方式基本相同。什么不起作用?它给我:très agrƒ©请尝试将页面的字符集设置为UTF-8。。。在block@Mark,但只有在使用$j_encoded=json_encode($string)时才起作用;因此,如果没有utf8_encode()@FFish,请去掉代码中的utf8_encode()
,我刚才看到了(编辑:啊,您更快)为什么在UTF-8环境中需要utf8_decode()
(转换为ISO-8859-1)?好的,我明白了。我还需要utf8\u解码()。。utf8_解码(json_解码($j_编码))和json_解码(utf8_解码($j_编码))有区别吗?是的,正确的说,无论如何你不应该使用utf8_编码。但你使用它的方式是点。1您先对utf8编码,然后对json编码,因此为了获得输入,您必须先对json进行解码,然后utf8@Pekka如果您仍然搞砸了编码(请参阅utf8\u编码
),您必须纠正它。好的,不要搞砸了编码也是一个解决方案,我编辑了我的答案,以反映我认为这是最好的答案,我需要检查我的DB编码!您可以添加完成所有这些所需的代码。为什么要给出负号?我有足够的情况下,这是唯一的工作方式。不要告诉我所有关于文件编码、数据库编码等的事情。有些情况下,您不知道资源的编码,而且是随机的。一些utf8,一些你能想象得到的任何其他东西。唯一对我有效的东西,我正在构建一个API,我需要用编码的字符Hanks Lukas将响应纯打印为json,这正是我想要的。它将诸如\u00e9
之类的编码转换为é
。我刚刚确认了它的用途。不过我还是很好奇,depth
参数真的有用吗?如果递归在某个深度停止,是否意味着json不会根据位掩码进行完全en/解码?另请参见,使用json_UNESCAPED_UNICODE | json_UNESCAPED_SLASHES
谢谢,这为我指明了方向,只不过一开始会让事情变得更糟!)然后我意识到这是因为在堆栈中的某个更深的地方有一些明显的“过度编码”,所以-也许很奇怪-将utf8\u编码更改为utf8\u解码解决了这个问题。
<?php
header('Content-Type: text/html; charset=utf-8');
echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
$str = json_encode($data);
$str = addslashes($str);