我使用ajax调用来接收通过复杂查询构造的多维JSON数组。数组中的某些值包含带有撇号的文本。接收到的数据的简化JSON示例:
{"rows":
{"51314":
{"id":"1020","text":"O’Conner"},
"51315":
{"id":... etc etc
数据通过报头直接回显到页面上以构造表内容,因此在客户端收到后处理它并不是一个真正的选项,至少不是我看到它的方式,但也许是可能的?
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
echo json_encode($this->data);
如上所示,数据在服务器响应文本中正确显示,但在屏幕上没有显示撇号之后的所有文本!对如何解决这个问题有什么想法吗?*
这是我到目前为止所尝试的:
echo json_decode(str_replace("'", "'", json_decode($this->data)));
addslashes()需要字符串,而不是数组,与htmlspecialchars()类似。
非常感谢任何帮助。谢谢!
编辑
1)仔细观察,实际上是单引号(')(也就是打字机的撇号)导致了这个问题。我想我的英语不太好。很抱歉。我已经相应地更改了标题。一个更好的例子是:
"文本":"硅镁层的"。
这就是我最终成功的方法。
在向多维数组添加内容之前,我添加了以下代码行:
if (strpos($text, "'")) {
$_t = str_replace("'", "'", $text);
$text = $_t;
}
我还尝试使用addslashes()和htmlspecialchars(),但没有工作。
编辑这实际上是我使用的第三方jQuery应用程序中的一个显示错误,但希望上面的代码可以对面临类似问题的人有用。
替换者使用错误字符的问题。您正在替换'(单引号)而不是'(撇号)。
可以肯定的是,你应该替换这两个版本,但是只有当你确信你的库总是使用双引号来括住字符串时,才使用野蛮版本。
另外,您所粘贴的JSON似乎无效。我添加了空白来显示结构,但这暴露了结构问题。
’
不是标准的ASCII引号,但可能需要UTF-8编码。您应该首先将; charset=UTF-8
添加到Content-Type
中,并检查是否正确编码。如果它导致它像我一样在句子中间停止,我会感到惊讶,我宁愿期望它抛出一个错误,而不做任何事情……
除此之外,没有客户端代码和一些调试跟踪,很难说更多…