У меня такой код:
<?php echo '<script type="text/javascript">'; echo 'var out="'.$txt.'";'; echo '</script>'; ?>
Где $ txt – это переменная PHP, которая может содержать новые строки следующим образом:
line1 line2 hello world
Который закончится следующим образом:
var out="line1 line2 hello world";
Конечно, это приведет к ошибке Javascript.
Каков наилучший способ справиться с этим? Вывод переменной будет использоваться в текстовом поле HTML, поэтому я не думаю, что он может быть проанализирован в
$txt = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $txt );
должен заменить новые строки. Не делайте этого так .
Это наивная реализация экранирования строк для JavaScript . Поскольку вы на самом деле пытаетесь отформатировать строку для использования в JavaScript, гораздо лучшим решением будет использование json_encode
:
$txt = json_encode($txt); echo "<script>var out={$txt};</script>";
json_encode
будет корректно удалять специальные символы в строках, такие как кавычки, вкладки, фиды форм и другие специальные символы Unicode. Он также выполнит все правильное экранирование для преобразования объектов, массивов, чисел и булевых элементов.
вы можете добавить \
в конец строки, чтобы создать многострочную строку
var out="line1 \ line2 hello world";
Вы можете использовать str_replace
для преобразования разрывов строк в другой символ (в данном случае, возможно, пробел, но это зависит от того, как вы хотите, чтобы результат отображался)
$out = str_replace("\n", '\n', $in);
$content = str_replace( "\\n", "\\\\\\n", $content );
Результат:
var a = "Hello \ World"
Большинство из них не работают для меня. Обычно я использую json_encode как
<?php $MyVar = json_encode($MyVar); ?> <javascript language='javascript'> MyVar = <?php echo $MyVar; ?>
Но для быстрого исправления вы можете просто сломать такую строку: обратите внимание на двойные кавычки.
<?php $MyVar = "line one here then line two here finally line five here"; //** OR $MyVar = $MyVarA . " " . $MyVarB; ?> <HTML> <HEAD> <javascript language='javascript'> Myvar = "<?php echo $MyVar; ?>";
, , ,
Я пробовал это, и он работал хорошо.
<?php echo '<script type="text/javascript">'; $txt = "line1 \\n line2 hello world"; echo 'var out="'.$txt.'";'; echo '</script>'; ?>
Я использую PHP 5.3