избегая строки json с косой чертой?

У меня возникла проблема с передачей json-строки обратно в php-скрипт для обработки.

У меня есть строка json, которая была создана с помощью dojo.toJson (), который содержит a, и выглядит так:

[{"id":"2","company":"My Company / Corporation","jobrole":"Consultant","jobtitle":"System Integration Engineer"}] 

Когда я передаю строку обратно в php-скрипт, она получает chopped в / и создает неправильную строку json, что означает, что я не могу преобразовать ее в php-массив.

Каков наилучший способ избежать / в этой строке? Я смотрел на регулярные выражения и делал string.replace (), однако мое регулярное выражение не настолько сильное, и я не уверен, есть ли лучшие способы сделать это?

Большое спасибо

Related of "избегая строки json с косой чертой?"

Вам не нужно делать ничего особенного для представления / в JSON – строка может содержать любой символ, кроме " или (если не используется для запуска escape-последовательности) \ .

Возможно, проблема заключается в следующем:

  • способ анализа сервера JSON
  • способ анализа данных HTTP для получения строки JSON
  • способ кодирования строки перед выполнением запроса HTTP

(Я бы сделал ставку на то, что это последний из этих вариантов).

Я бы начал использовать такой инструмент, как LiveHttpHeaders или Charles Proxy, чтобы точно определить, какие данные отправляются на сервер.

(Я также хотел бы расширить вопрос с помощью кода, который вы используете для создания запроса, и кода, который вы используете для его анализа на другом конце).

\/ . Взгляните сюда . Документацию очень легко читать, кратким и понятным. Но unescaped / должен все еще быть действительным в строке JSON, так что, может быть, ваша ошибка находится где-то в другом месте?

ОК. Так или иначе.

При передаче переменных в PHP не использовать JSON – это полезно для передачи переменных другим способом.

Вместо этого вам лучше использовать метод http://api.dojotoolkit.org/jsdoc/1.3/dojo.objectToQuery и на стороне PHP разложить стандартные переменные PHP $_GET .

EDIT: Хорошо, я тоже здесь «потерял в лесу», но вот подсказка – проверьте, нет ли здесь каких-либо правил mod_rewrite. Кажется, похоже.

Кроме того, если вы можете отправить мне URL-адрес, который дал вам 404 (вы можете вырезать часть домена, меня интересует имя файла сценария и все последующие), возможно, я смогу дать вам более подробный ответ.

Чтобы быть ясным, предпочитаете ли вы отправлять JSON на PHP или использовать обычные значения форм, это вопрос предпочтения. Это / должно / работать в любом случае. Похоже, что вы не кодируете URL-адрес JSON на стороне клиента, поэтому серверная сторона обрабатывает / как разделитель пути. В этом случае его borked перед json_decode добирается до него.

поэтому, попробуйте encodeURIComponent (dojo.toJson (материал))

json_encode () используется для удаления косых черт. как это:

 prompt> json_encode(json_decode('"A/B"')); string(6) ""A\/B"" 

JSON_UNESCAPED_SLASHES был добавлен в PHP5.4 для подавления такого поведения.