У меня есть строка json, которая содержит некоторый html и атрибуты. Я пытаюсь избежать или заменить двойные кавычки одинарными в этой строке. мой код работает с некоторыми атрибутами html, но не со всеми. Мой пример:
$json='{"en":"<b class = "test" size = "5" >Description</b>"}';
$json=preg_replace('/([^:,{])"([^:,}])/', "$1".'\''."$2",$json);
echo htmlspecialchars($json);
//ouput: {"en":"<b class='test' size='5" >Description</b>"}
Необходимый результат:
{"en":"<b class='test' size='5' >Description</b>"}
В вашем примере это не строка JSON. Что создало такую странную струну? Можете ли вы исправить это, чтобы вместо этого предоставить вам настоящий JSON (с правильным экранированием)?






Попробуйте это: str_replace('"', "'",$json);
$json='{"en":"<b class = "test" size = "5" >Description</b>"}';
$json=str_replace('"', "'",$json);
echo htmlspecialchars($json);
На выходе будет: {'en':'<b class='test' size='5' >Description</b>'}
Спасибо за Ваш ответ. Значение json по-прежнему должно заключаться в двойные кавычки.
Я надеюсь, что это работает как ожидалось ([^{,:])"(?![},:])
$json='{"en":"<b class = "test" size = "5" >Description</b>"}';
$json=preg_replace('/([^{,:])"(?![},:])/', "$1".'\''."$2",$json);
Результаты в
{"en":"<b class='test' size='5' >Description</b>"}
Спасибо, это именно то, что мне нужно :)
Хорошее решение. Мы должны добавить, что в строке примера проблема с последней кавычкой заключается в том, что символ перед ней уже занят предыдущим совпадением. Вместо этого в вашем решении используется «негативный прогноз». Это не потребляет персонажей. Задача решена.
Интересная проблема. Вы пробовали regex101.com?