У меня есть PHP-скрипт, который принимает сообщения с других серверов в формате JSON. Иногда на внешнем сервере включены волшебные кавычки, поэтому я пропускаю их через stripslashes() на всякий случай. Однако я сталкиваюсь с проблемами, когда публикуемые данные также имеют символ кавычек. Это также ускользает от удаленного сервера, а затем стрипы на моем сервере также неправильно удаляют это, нарушая JSON.
Например, я могу легко передать и принять следующий JSON:
stuff = {"items":["item1","item2"],
"urls":["url1","url2"],
"pics":["pic1","pic2"]};
Однако это сломается:
stuff = {"items":["item_including_quotes1","item_including_quotes2"],
"urls":["url1","url2"],
"pics":["pic1","pic2"]};
У меня нет контроля над значениями удаленного массива, и они могут содержать одинарные и двойные кавычки. У меня есть контроль над тем, как они подготавливаются к отправке. В настоящее время javascript выглядит так:
encodeURIComponent(JSON.stringify(stuff));
и PHP выглядит так:
json_decode(stripslashes(urldecode($_POST["stuff"])));
Эти данные публикуются с помощью javascript JSON.stringify и encodeuricompnent и обрабатываются с помощью PHP json_decode и urldecode.
Я рассматривал регулярное выражение для удаления обратной косой черты только тогда, когда они появляются между скобками [], но это кажется неуклюжим. Есть ли более элегантное решение для удаления только определенных косых черт?