экранирование строки json с косой чертой? - PullRequest
3 голосов
/ 05 августа 2010

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

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

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 05 августа 2010

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

Возможно, проблема в:

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

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

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

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

0 голосов
/ 02 марта 2012

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

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

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

0 голосов
/ 11 августа 2010

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

итак, попробуйте encodeURIComponent (dojo.toJson (stuff))

0 голосов
/ 05 августа 2010

Хорошо.В любом случае.

Когда переменные передаются в PHP, не используйте JSON - это хорошо для передачи переменных другим способом.

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

РЕДАКТИРОВАТЬ: Хорошо, я тоже «заблудился в лесу», но вот совет - проверьте, если у вас нет некоторых правил mod_rewrite вдействие здесь.Вроде как.

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

0 голосов
/ 05 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...