Обработка экранированных косых черт в строке JSON

Я пытаюсь получить JSON базы данных, и код выглядит так

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

Пока я конвертирую в объект json и он показывает вот так.

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

Я только что подал заявку \ напечатать специальный символ /, но это не работает. Я применил много вещей, чтобы напечатать специальный символ. Это проблема при преобразовании специального символа в JSON?

2 ответа

Как уже упоминалось другими, косая черта не является специальным символом внутри строки, в 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 флаг для json_encode() в PHP, чтобы предотвратить добавление обратной косой черты. Однако это не является необходимым и может привести к тому, что строгий анализатор JSON отклонит данные.

Итак, чтобы подвести итог, правильный способ объявить вашу строку в PHP:

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

Как примечание, вы, вероятно, также, что включить http:// в начале строки и прохода $row['file_name'] через urlencode() также, поскольку данные представляются в виде URL:

$path["file_name"] = "http://www.119.com/assets/demo/large/".urlencode($row["file_name"]);

Не должно быть необходимости избегать косой черты, поскольку она не считается специальным символом.

Возможно, вам придется заменить / на //, так как некоторые системы удаляют одну косую черту, когда она анализируется / отображается, на ум приходят окна.

Другие вопросы по тегам