Вопрос

Я генерирую 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>';

Видеть: http://php.net/manual/en/function.addslashes.php

Другие советы

Я использую json_encode().

http://ie2.php.net/manual/en/function.json-encode.php

Это должен быть шаг в правильном направлении:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top