0

我有一个 PHP 脚本正在读取客户端提供的一些 JSON 数据。提供的 JSON 数据中有一个“智能报价”。

例子:

{
    "title"         : "Lorem Ipsum’s Dolar" 
}

在我的脚本中,我使用一个小函数来获取 json 数据:

public function getJson($url) {
    $filePath = $url;
    $fh = fopen($filePath, 'r') or die();
    $temp = fread($fh, filesize($filePath));
    $temp = utf8_encode($temp);
    echo $temp . "<br />";
    $json = json_decode($temp);
    fclose($fh);
    return $json;
}

如果我对数据进行 utf8 编码,当我回显它时,我看不到引号应该在哪里。如果我不对数据进行 utf8 编码,当我将其回显时,我会看到有趣的问号符号。</p>

关于如何真正看到正确角色的任何想法?

谢谢!

4

3 回答 3

1

服务器是否有可能以 windows-1252 之类的编码发送 json 数据?该代码页具有一些智能代码字符,其中 iso-8859 具有控制字符。您可以尝试使用iconv("windows-1252", "utf-8", $temp)而不是utf8_encode. 如果服务器已经发送了 utf-8 编码的 json,那就更好了,因为这是每个 rfc4627 推荐的编码。

于 2010-07-01T21:13:27.800 回答
0

问题更多在于生成 JSON 文件。在那里你应该逃避 ' by \'

如果你不能修改这部分,你应该用addlashes这样做:

$temp = fread($fh, filesize($filePath));
$temp = utf8_encode($temp);
echo $temp . "<br />";
$temp = addslashes($temp);
$json = json_decode($temp);
于 2010-07-01T20:41:29.657 回答
0

假设数据都是 utf8,你可以做一个字符串替换吗?

$text = str_replace($find, $replace, $text);

寻找下面的字符?

 '“'  // left side double smart quote
 'â€'  // right side double smart quote
 '‘'  // left side single smart quote
 '’'  // right side single smart quote
 '…'  // elipsis
 '—'  // em dash
 '–'  // en dash
于 2010-07-01T20:49:18.347 回答