Php: json从ajax调用包含单引号不显示在html


php: json from ajax call containing single quotes not showing in html

我使用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("'", "&#39", $text); 
            $text = $_t;
        }

我还尝试使用addslashes()和htmlspecialchars(),但没有工作。

编辑这实际上是我使用的第三方jQuery应用程序中的一个显示错误,但希望上面的代码可以对面临类似问题的人有用。

替换者使用错误字符的问题。您正在替换'(单引号)而不是'(撇号)。

可以肯定的是,你应该替换这两个版本,但是只有当你确信你的库总是使用双引号来括住字符串时,才使用野蛮版本。

另外,您所粘贴的JSON似乎无效。我添加了空白来显示结构,但这暴露了结构问题。

不是标准的ASCII引号,但可能需要UTF-8编码。您应该首先将; charset=UTF-8添加到Content-Type中,并检查是否正确编码。如果它导致它像我一样在句子中间停止,我会感到惊讶,我宁愿期望它抛出一个错误,而不做任何事情……

除此之外,没有客户端代码和一些调试跟踪,很难说更多…