0

クライアントから提供された JSON データを読み取る PHP スクリプトがあります。提供された 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

サーバーがjsonデータをwindows-1252のようなエンコーディングで送信している可能性はありますか? そのコードページには、iso-8859 が制御文字を持ついくつかのスマート コード文字があります。iconv("windows-1252", "utf-8", $temp)の代わりに使ってみてくださいutf8_encode。サーバーが既に utf-8 でエンコードされた json を送信している場合は、rfc4627 で推奨されるエンコードであるため、さらに良いでしょう。

于 2010-07-01T21:13:27.800 に答える
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 に答える
0

問題は、JSON ファイルを生成する側にあります。そこで、「by \」をエスケープする必要があります

この部分を変更できない場合は、addslashes を使用して次のようにする必要があります。

$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 に答える