Javascript, сгенерированный PHP, и кавычки
-
21-09-2019 - |
Вопрос
Я генерирую javascript в своем PHP-коде, и мне нужно назначить некоторые переменные php переменным javascript.К сожалению, иногда мои переменные PHP содержат кавычки.например:
$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = '{$foo}';</script>";
сгенерирует ошибку JavaScript, поскольку результирующий JavaScript будет выглядеть следующим образом:
<script type='text/javascript'>var foo = '"'Dis here be a \"string\"';
Я знаю, что могу использовать регулярное выражение в $foo, чтобы заменить все '
отмечает с \'
но это сложно по разным причинам.Могу ли я что-нибудь сделать кроме этого?Что-то вроде перла q()
функция...
Решение
Пробовали это сделать?
$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';
Другие советы
Я использую json_encode().
Это должен быть шаг в правильном направлении:
addcslashes($str, "\"\r\n\\\t/\0..\37");
Вы уверены?Не так ли:
var foo = ''Dis here be a "string"'
Чтобы предотвратить двойное ', попробуйте:
$foo = "\'Dis here be a \"string\"";
или
$foo = '\\\'Dis here be a "string"';
Также стоит отметить, что вы можете использовать файл PHP в качестве файла JavaScript.
<script type="text/javascript" src="js/main.php"></script>
И вы можете выполнять код PHP в этом файле, а также выводить код JavaScript, отображая его с помощью PHP.
Поскольку вы используете конечное значение в JavaScript, я бы использовал json_encode
:
$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = " . json_encode($foo) . ";</script>";
И он будет правильно выводить:
<script type='text/javascript'>var foo = "'Dis here be a \"string\"";</script>
Обратите внимание, я не заключал в дополнительные кавычки json_encode
функция.Он автоматически добавит необходимые кавычки, чтобы сделать его допустимой строкой JavaScript.
Ответ Фрэнка Фармера интересен, но он ускользает от некоторых вещей, которые не нужно экранировать, например табуляции.
Попробуйте этот фрагмент, он отлично работает:
<script type="text/javascript">
alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>
Поскольку я всегда подключаюсь к базе данных в своих PHP-скриптах, которые передают текст непосредственно в строки Javascript, я полагаюсь на real_escape_string для выполнения своей грязной работы.addslashes() не обрабатывает символы новой строки, и они иногда проникают в строки, которые я передаю в Javascript.
Просто $sql->real_escape_string($string)
делает все это лучше, преобразуя все, что выдает база данных, в форму, удобную для Javascript.