带有 é 等特殊字符的 json
Posted
技术标签:
【中文标题】带有 é 等特殊字符的 json【英文标题】:json with special characters like é 【发布时间】:2011-11-09 05:12:16 【问题描述】:我正在开发一个使用 jQuery、php 和 JSON 作为响应的依赖选择脚本。
除了使用像法语这样的特殊字符(é、è、à...)之外,一切都很顺利
如果我像 (é , è , à) 一样对它们进行预编码(这里我在 & 符号和单词的其余部分之间使用空格来防止我的问题中的自动编码)它可以工作,但是当用jquery 字符不会被转换成它们应该看起来的样子 (é...),而是按原样显示 (é)
如果我将它们写成 (é) 并且不对其进行预编码,则不会显示此数组条目中的完整值。
我应该在这里做什么?
谢谢。
【问题讨论】:
通常不需要实体化东西,因为 jQuery 会为你完成。 @NullUserException: not jQuery “实体化了你的东西”。它甚至根本没有实体化。 @Tomalak 嗯...我指的是.text()
,它确实将某些字符转换为它们的html实体等价物(通过createTextNode()
)
@NullUserException:不,它没有。 text()
设置 DOM 节点的 textContent
属性。 HTML 字符实体仅存在于序列化的 HTML 中(即当 HTML 表示为文本时),它们甚至不存在于 DOM 中。
【参考方案1】:
如果我将它们写成 (é) 并且不预编码它们的完整值 此数组条目未显示。
我应该在这里做什么?
在 JSON 中,您不对值进行 HTML 编码。您按字面意思发送它们 (é) 并正确设置 set Content-Type:
header('Content-Type: application/json; Charset=UTF-8');
当然要声明数据的编码方式。
【讨论】:
好的,我只是在将发送 json 响应的文件中的 json_encode() 之前添加了这个标头,并尝试了两种方式(é 和 é)但仍然是同样的问题 @medk:首先:停止尝试&eacute
。您在这里处理的不是 HTML,所以这与您的问题根本无关。您是刚刚尝试了未修改的标头还是使用了数据的实际编码?
是的,我在 firefox 中为显示结果的页面明确设置了 utf-8 编码,并尝试了包含两种类型(正常和编码)的响应,正常从不显示,而 pre-编码显示原样,所以总是同样的问题
@medk:您在 Firefox 中设置的编码无关紧要。您必须确保服务器发送广告编码中的字符:当标头显示 UTF-8 时,数据必须是 UTF-8。如果您的数据不是 UTF-8(我怀疑不是),那么您必须相应地更改标头。
很好的答案,为我修好了!谢谢:)【参考方案2】:
这对我有用,希望对遇到类似问题的其他人也有用。
$title = 'é';
$title = mb_convert_encoding($title, "UTF-8", "HTML-ENTITIES");
header('Content-Type: application/json; Charset="UTF-8"');
echo json_encode(array('title' => $title));
mb_convert_encoding 函数接受一个值并将其从(在本例中)HTML-ENTITIES 转换为 UTF-8。
请参阅此处了解有关功能http://php.net/manual/en/function.mb-convert-encoding.php的详细信息
【讨论】:
你摇滚!!使用 PHP 库从 mysql utf.8 转换为 Firebase 时为我工作。 好人,对于我的代码函数: echo json_encode(mb_convert_encoding($this->jsonRet, "HTML-ENTITIES", "UTF-8"));【参考方案3】:就像第一个回答者
您使用数据库吗?如果是,请确保将数据库表声明为 UFT8 HTML 页面是如何声明的? UTF-8 是 PHP 脚本文件中的字符串吗?如果是,请确保该文件具有 UTF-8 文件格式
您也可以使用 utf8_encode(发送到 HTML)和 utf8_decode(接收),但不是正确的方式
【讨论】:
以上是关于带有 é 等特殊字符的 json的主要内容,如果未能解决你的问题,请参考以下文章