1

データベースのjsonを取得しようとしていますが、コードは次のようになります

   $path["file_name"] = "www.119.com\/assets\/demo\/large\/".$row["file_name"];

jsonオブジェクトに変換すると、このように表示されます。

www.119.com\\\/assets\\\/demo\\\/large\\\/demo1.png

\特殊文字の印刷を申請しまし/たが、うまくいきません。特殊文字を印刷するために多くのことを適用しました。特殊文字をJSONに変換する際に問題がありますか?

4

2 に答える 2

1

他の人が言及したように、PHP または Javascript では、スラッシュは文字列内の特殊文字ではありません (JSON は Javascript から派生しているため、文字列補間と同じ規則に従います)。ただし、JSON を読んでいる場合は、そうであると考えるのは許されます (常にRTM する必要があります ;-) )。

スラッシュをエスケープする必要があると思われる理由は、PHP と Javascript が余分なスラッシュを補間する方法が微妙に異なるためです。PHP と Javascript の両方で有効な次の文字列宣言を検討してください。

"AC\/DC"

PHP では、追加のバックスラッシュはリテラルとして扱われるため、次のようになります。

echo "AC\/DC"; // outputs AC\/DC

Javascript では、余分なバックスラッシュが削除されるため、次のようになります。

console.log("AC\/DC"); // logs AC/DC

JSON ではスラッシュのエスケープが義務付けられていますがjson_encode()、このエスケープは自動的に処理されます。バックスラッシュを自分で文字列に追加する必要はありません。また、これらの追加のバックスラッシュが補間される方法が異なるため、単純に JSON 文字列を取得して PHP ソースにドロップすることはできません。異なる値として解釈されるためです。

PHP 5.4.0 以降JSON_UNESCAPED_SLASHES、PHP でフラグを指定json_encode()して、バックスラッシュが追加されないようにすることができます。ただし、これは不要であり、厳密な JSON パーサーがデータを拒否する可能性があります。

要約すると、PHP で文字列を宣言する正しい方法は次のとおりです。

$path["file_name"] = "www.119.com/assets/demo/large/".$row["file_name"];

補足として、データは URL のように見えるため、おそらくhttp://文字列の先頭に何を含めて$row['file_name']パススルーするかについても説明します。urlencode()

$path["file_name"] = "http://www.119.com/assets/demo/large/".urlencode($row["file_name"]);
于 2013-03-27T08:51:36.383 に答える
0

スラッシュは特殊文字とは見なされないため、エスケープする必要はありません。

一部のシステムでは、解析/表示時に単一のスラッシュを削除するため、/ を // に置き換える必要がある場合があります。ウィンドウが思い浮かびます。

于 2013-03-27T08:36:18.447 に答える