Сгенерированный PHP javascript и кавычки - PullRequest
0 голосов
/ 19 ноября 2009

Я генерирую некоторый 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 для замены всех ' отметок на \', но это сложно по разным причинам. Есть ли что-нибудь, что я могу сделать, кроме этого? Что-то похожее на функцию perl q() ...

Ответы [ 7 ]

4 голосов
/ 19 ноября 2009

Пробовал делать это?

$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';

См .: http://php.net/manual/en/function.addslashes.php

3 голосов
/ 19 ноября 2009

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

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

2 голосов
/ 19 ноября 2009

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

addcslashes($str, "\"\r\n\\\t/\0..\37");
1 голос
/ 19 ноября 2009

Стоит также отметить, что вы можете использовать файл PHP в качестве файла JavaScript

<script type="text/javascript" src="js/main.php"></script>

И вы можете выполнять код PHP в этом файле, а также выводить код JavaScript, повторяя PHP.

1 голос
/ 19 ноября 2009

Ты уверен? Не правда ли:

var foo = ''Dis here be a "string"'

Чтобы избежать двойного ', попробуйте:

$foo = "\'Dis here be a \"string\"";

или

$foo = '\\\'Dis here be a "string"';
0 голосов
/ 01 февраля 2013

Ответ Фрэнка Фармера интересен, но он ускользает от некоторых вещей, которые не нужно избегать, например от вкладок.

Попробуйте этот фрагмент, он отлично работает:

<script type="text/javascript">
    alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>

Поскольку я всегда подключен к базе данных в моих сценариях PHP, которые передают текст непосредственно в строки Javascript, я использую real_escape_string для выполнения своей грязной работы. addlashes () не обрабатывает переводы строки, и они иногда проникают в строки, которые я передаю в Javascript.

Простой $sql->real_escape_string($string) делает все лучше, экранируя все, что база данных выплевывает в Javascript-дружественную форму.

0 голосов
/ 19 ноября 2009

Поскольку вы используете конечное значение в 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.

...