Передача переменных из PHP в JavaScript

Передача переменных из PHP в JavaScript

PHP программисты иногда сталкиваются с проблемами при попытке динамически генерировать JavaScript код. Проблема заключается  в использовании некоторых символах одновременно в JavaScript, а также в PHP. Это условие может несколько усложнить нам жизнь, но выход найти можно.

Избавляемся от кавычек и символов перевода строки.

Предположим мы работаем с PHP переменной, которая должна быть выведена с помощью функции alert в JavaScript.

$str = «небольшой фрагмент текста
разбитый более чем на одну строку
и содержащий «двойные» и `одиночные` кавычки»;

Чтобы вывести сообщение, содержащееся в переменной $str в JavaScript напрашивается решение вида:

<script type="text/javascript">
  alert("<?php echo $str; ?>");
</script>

что приводит к ошибке в коде в JavaScript:

<script type="text/javascript">
  alert("небольшой фрагмент текста
разбитый более чем на одну строку
и содержащий "двойные" и `одиночные` кавычки ");
</script>

Во-первых, разделители строки в JavaScript не работают, их нужно заменить на \n (символ представляющий перевод строки). Во-вторых, двойные кавычки внутри текста конфликтуют с внешними кавычками при вызове alert.

С учетом выше сказанного вот код, который будет работать корректно:

<script type="text/javascript">
 alert("<?php echo preg_replace("/\r?\n/", "\\n", addslashes($str));?>");
</script>

Как видим нам понадобились две функции PHP:

preg_replace — поиск и замена по регулярному выражению

addslashes — экранирует строку с помощью слэшей, возвращает строку, в которой перед каждым спецсимволом добавлен обратный слэш

Если мы выводим сообщение из PHP кода нам необходимо будет сделать следующее:

$str = preg_replace("/\r?\n/", "\\n", addslashes($str));
echo "<script type="text/javascript"> ";
echo "  alert("$str"); ";
echo "</script> ";

или

<?php
$str = preg_replace("/\r?\n/", "\\n", addslashes($str));
?> 
<script type="text/javascript">;
alert("<?php echo $str; ?>");
</script>;

В результате получим:

<script type="text/javascript">
  alert("небольшой фрагмент текста\n разбитый более чем на одну строку\n и содержащий \" двойные \" и \`одиночные\` кавычки ");
</script>

Этот же самый подход может быть использован во многих схожих ситуациях где из PHP необходимо передать переменную в JavaScript.

При попытке отладить этот код следует проверить его работоспособность в JavaScript (современные браузеры имеют встроенные отладчики) и только потом посмотреть как код может быть получен из PHP.

Примечание: нет необходимости дополнительно преобразовывать символы & и « к их эквивалентным кодам объекта HTML, так как JavaScript — это независимый от HTML язык и умеет без проблем работать с этими символами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *