Обработка строк с переносами строк в переменные - PullRequest
1 голос
/ 21 ноября 2011

Я пытаюсь получить его еще раз.

Я получил JS-переменную, которая выглядит следующим образом:

var test;

Теперь я пишу несколько JS с PHP:

<?php
    $phpvar = "a text with
    a linebreak";
    echo "<script type='text/javascript'>
        var test;
        test = '" . $phpvar . "';
    </script>";
?>

Теперь, если я запускаю его, он выводит источник следующим образом:

<script type='text/javascript'>
var test;
test = 'a text with
a linebreak';
</script>

Это дает мне исключение JS:

ERROR: unterminated string literal

Почему-то JS кажется нераспознать, что строка находится более чем в одной строке.

Как я могу это понять, если в конце строка должна снова иметь разрыв строки?(Итак, если все выполнение завершится, у меня должна быть строка, включающая все разрывы строк)

Спасибо за вашу помощь;)

Ответы [ 2 ]

4 голосов
/ 21 ноября 2011

Попробуйте, если вы используете \ в конце строки Javascript, вы можете использовать несколько строк в строке.

<?php
    $phpvar = "a text with
    a linebreak";
    echo "<script type='text/javascript'>
        var test;
        test = '" . str_replace("\n", "\\\n",$phpvar) . "';
    </script>";
?>
1 голос
/ 22 ноября 2011

экранирование в php:

js:           php:
<linebreak>   \n
\             \\
\n            \\n

Если вы хотите это:

var test = "te\
st";
console.log(test) > "test"

в этом случае вам нужно использовать \ и <linebreak> (в js), поэтому вам нужно заменить \n на \\ plus \n (в php)

<?php
    $phpvar = "a text with
    a linebreak";
    echo "<script type='text/javascript'>
        var test;
        test = '" . str_replace("\n", "\\\n",$phpvar) . "';
    </script>";
?>

это сохраняет разрывы строк как php, но не в javasccript


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

console.log(test) > "te
                     st"

Вам необходимо добавить \n как экранированную строку, а не как символ перевода строки. Так что код будет выглядеть так

var test = "te\n\
st"
console.log(test) > "te
                     st" 

В этом случае вам нужны \n и \ и <linebeak> (в js), поэтому вам нужно заменить \n на \\n плюс \\ плюс \n

<?php
    $phpvar = "a text with
    a linebreak";
    echo "<script type='text/javascript'>
        var test;
        test = '" . str_replace("\n", "\\n\\\n",$phpvar) . "';
    </script>";
?>

это сохраняет разрывы строк в php, а также добавляет разрывы строк в javascript

...