PHP. JS. Запись переноса строки в строковом литерале JS

doran7

Новичок
Столкнулся с этой заморочкой, решил разобраться. Всего-то надо чтобы, допустим, js alert выводил две или больше строк в своем окне. В инете стока понаписано... в пору отдельную статью с расследованием проводить. Вообще в JS, в официальном описании, сказано что для перевода строки в строковом литерале JS надо использовать управляющую последовательность \n. Оно, собственно, и использую.
Но народ говорит всякое. Например. что в Windows для перевода строки используется \r\n, а в Unix \n.
И вообще, никаких \r или \n не надо, а достаточно вообще простого \ . И еще, если js-скрипт генерируется через php-скрипт то \n или \r\n , например, надо экранировать так: \\n или \\r\\n.
Я набросал простенький тест, файл test.php:
Код:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Трафарет HTML5</title>
</head>
<body>
<?php
$out1='<h2>Тест переноса строки в строковом литерале JS</h2>';
$out1.='<p><input type="button" value="Go" onclick="ftest1();"/>';
$out1.='<script>function ftest1(){alert("Первая строка\\r\\nВторая строка");}</script>';
echo $out1;
?>
</body>
</html>
Нормальную структуру html-документа сделал для полной корректности. Перенос строки в вышеуказанном тесте у меня работает и с \n, и с \\n, и с \r и с \\r и с \r\n и с \\r\\n. Не работает с \ и с \\.
Среда - Денвер под winXP.

Прошу корифеев подсказать, как вообще, правильно.
 

Crys

Двинутый новичок
а достаточно вообще простого \
Это если у тебя несколько строк:

Код:
var a = "first line \r\nsecond line";
===
var a = "first line \
second line";
====
var a = "first line
second line"; // А ВОТ ТАК НИЗЯ!

И еще, если js-скрипт генерируется через php-скрипт то \n или \r\n , например, надо экранировать так: \\n или \\r\\n.
А по этому тут читай - http://phpfaq.ru/na_tanke#achtung
 

doran7

Новичок
Код:
var a = "first line \
second line";
====
var a = "first line
second line"; // А ВОТ ТАК НИЗЯ!
Благодарю, мил человек. Действительно низя, проверил. С одной заморочкой в виде \ разобрался, значит. Бэкслэш \ нужен для указания переноса в строковом литерале JS (в js-скрипте) при необходимости такого переноса, но этот бэкслэш не делает переноса при выводе строкового литерала в каком-либо сообщении типа alert. В точности с описанием ECMAScript 5, там и сказано что бэкслэш при этом не включается в строковый литерал как перенос строки.

С остальным пока не ясно, почему именно var a = "first line \r\nsecond line"; а не var a = "first line \nsecond line"; или var a = "first line \rsecond line";...?
 
Сверху