Я ищу лучший способ избежать некоторого текста Javascript в PHP, а json_encode – неправильный инструмент для работы.
Проблема исходит из этой строки:
echo "onclick = \" SwitchDiv ('". $ option."') \ "";
Если в $option есть апостроф, это сочный шар на стороне клиента. Но выполнение прямого json_encode (который отлично работает в других контекстах) не помогает:
echo "onclick = \" SwitchDiv (". json_encode ($ option).") \ "";
Это создает выходную строку onclick="SwitchDiv("athlete's foot")" , что приводит к преждевременному завершению значения onclick . (Это также происходит, если я onclick значение onclick в одинарных кавычках.)
Есть ли элегантный способ обойти это? Должен ли я просто json_encode вывод json_encode через регулярное выражение, которое будет избегать одиночных кавычек?
json_encode – правильный инструмент для работы. Ваша проблема возникает из-за того, что вы также включаете Javascript в атрибут HTML , поэтому он также должен быть htmlspecialchars -encoded.
echo " onclick=\"SwitchDiv(" . htmlspecialchars(json_encode($option)) . ")\"";