PHP анализирует содержимое JavaScript внутри heredoc


<?php
$javascript = <<<EOT
<script type="text/javascript">
function test () {
    return 'test test test n test test test';
}
</script>
EOT;

echo $javascript;
?>

n выше разбирается как новая строка PHP, генерирует HTML-источник следующим образом

    return 'test test test 
 test test test';

И это приводит к синтаксической ошибке JavaScript: unterminated string literal.


У меня есть большой кусок кода JavaScript, поэтому я не хочу оборачивать их, как

$javascript = "<script type="text/javascript">nfunction test()...n";

И на самом деле код JavaScript не является прямым эхом к странице, он передается в другую функцию, поэтому мне нужна переменная PHP.


Итак, как я могу определить переменную PHP, которая содержит большой кусок кода JavaScript без вызывает проблемы?

Есть ли способ, подобный if / endif?

<?php if (condition): ?>
html code...
<?php endif ?> 
2 2

2 ответа:

Вариант 1: Используйте NOWDOC, который относится к HEREDOCs, как ' одинарные кавычки относятся к " двойным кавычкам.

$javascript = <<<'EOT'
   ...\n...
EOT;

Вариант 2: экранировать специальный символ:

$javascript = <<<EOT
    ...\\n...
EOT;

Мой код:

$javascript = <<<'EOT'
<script type="text/javascript">
$demo = 'test';
alert($demo);
</script>
EOT;
echo $javascript;

Если я использую 'EOT', то мой код в javascript работает хорошо, но я использую EOT, тогда мой код поймет, что $dem является переменной в PHP