PHP Linefeeds (\ n) не работает

Как упоминалось в более раннем ответе, это поведение известно как с именем access по объекту window . Значение атрибута name для некоторых элементов и значение атрибута id для всех элементов становятся доступными как свойства глобального объекта window. Они известны как именованные элементы. Поскольку window является глобальным объектом в браузере, каждый именованный элемент будет доступен как глобальная переменная.

Это было первоначально добавлено Internet Explorer и в конечном итоге было реализовано всеми другими браузерами просто для совместимости с сайтами которые зависят от этого поведения. Интересно, что Gecko (движок рендеринга Firefox) решил реализовать это только в режиме quirks , тогда как другие механизмы рендеринга оставили его в стандартном режиме.

Однако, с Firefox 14, Firefox теперь поддерживает именованный доступ к объекту window в стандартном режиме. Почему они изменили это? Оказывается, все еще есть много сайтов, которые полагаются на эту функциональность в стандартном режиме. Microsoft даже выпустила маркетинговую демонстрацию , которая предотвратила демонстрацию работы в Firefox.

Недавно Webkit рассмотрел противоположное , отменив именованный доступ на window объект только для режима quirks. Они решили против этого по тем же соображениям, что и Гекко.

Итак ... сумасшедший, поскольку кажется, что это поведение теперь технически безопасно использовать в последней версии всех основных браузеров в стандартном режиме. Но хотя названный доступ может показаться несколько удобным, его не следует использовать.

Почему? В этой статье можно суммировать рассуждения о том, почему глобальные переменные являются плохими . Проще говоря, наличие множества дополнительных глобальных переменных приводит к большему количеству ошибок. Допустим, вы случайно набрали имя var и случайно набрали id узла DOM, SURPRISE!

Кроме того, несмотря на стандартизацию, все еще существует довольно много несоответствий в реализациях браузера именованный доступ.

И я уверен, что есть больше, если вы попробуете использовать именованный доступ в случаях с краем.

Как упоминалось в других ответах, используйте document.getElementById, чтобы получить ссылку на узел DOM своим id. Если вам нужно получить ссылку на узел по его атрибуту name, используйте document.querySelectorAll.

Пожалуйста, не распространяйте эту проблему, используя именованный доступ на вашем сайте. Так много веб-разработчиков потратили время, пытаясь отследить это магическое поведение . Нам действительно нужно принять меры и заставить механизмы рендеринга отключить именованный доступ в стандартном режиме. В краткосрочной перспективе это сломает некоторые сайты, делающие плохие вещи, но в конечном итоге это поможет переместить веб-сайт.

Если вам интересно, я более подробно расскажу об этом в своем блоге - http://tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/ .

29
задан Lizard 10 June 2010 в 15:51
поделиться

10 ответов

Используйте двойные кавычки. "test\n" будет работать просто отлично.

Если строка заключена в двойные кавычки ("), PHP будет интерпретировать больше escape-последовательностей для специальных символов:

http://php.net/manual /en/language.types.string.php

47
ответ дан ceejayoz 10 June 2010 в 15:51
поделиться

\n не должен рассматриваться конечным пользователем как новая строка, для этого необходимо использовать элемент html <br/>. Параметр / n влияет только на то, как HTML, сгенерированный php, появляется в исходном коде веб-страницы. если вы зайдете на свою веб-страницу и нажмете «просмотреть исходный код», вы увидите сгенерированный php html в виде одной длинной строки. Не красиво Это то, что \n для ; , чтобы разбить этот php-сгенерированный html на более короткие строки. Цель \n - сделать красивую страницу просмотра источника.

26
ответ дан aldrin27 10 June 2010 в 15:51
поделиться

Когда вы запускаете скрипт PHP в браузере, он будет отображаться как HTML по умолчанию. Если используемые вами книги показывают иное, то либо код, либо иллюстрация неточны. Вы можете использовать «просмотр источника» для просмотра того, что было отправлено в браузер, и вы увидите, что ваши переводы строки присутствуют.

<?php
echo "Line 1\nLine 2";
?>

Это будет отображаться в вашем браузере как:

Line 1 Line 2

Если вам нужно отправить простой текст в ваш браузер, вы можете использовать что-то вроде:

<?php
header('Content-type: text/plain');
echo "Line 1\nLine 2";
?>

Это выведет:

Line 1
Line 2
8
ответ дан nilesh 10 June 2010 в 15:51
поделиться

Я уверен, что вы выводите в HTML-файл. Проблема в том, что html игнорирует новые строки в источнике, что означает, что вы должны заменить новые строки на <br/>, если вы хотите, чтобы новая строка отображалась на странице.

6
ответ дан Tariqulazam 10 June 2010 в 15:51
поделиться

nl2br() функция используется для создания новой строки

echo nl2br("Welcome\r\n This is my HTML document", false);

Приведенный выше пример выдаст:

Welcome
Это мой HTML-документ

4
ответ дан ScottJShea 10 June 2010 в 15:51
поделиться

Двойные кавычки - это то, что вы хотите. Одинарные кавычки игнорируют \ escape. Двойные кавычки также оценят переменные выражения для вас.

Проверьте эту страницу в руководстве по php для получения дополнительной информации.

2
ответ дан Matt Stephenson 10 June 2010 в 15:51
поделиться

Это потому, что вы используете апострофы ('). Вместо этого используйте кавычки (")." PHP предлагает буквально использовать все, что находится между апострофами.

2
ответ дан Jan Kuboschek 10 June 2010 в 15:51
поделиться

Вам нужно использовать двойные кавычки. Двойные кавычки имеют больше escape-символов.

error_log("test\n", 3, 'error.log');
error_log("test2\n", 3, 'error.log');
3
ответ дан Max 10 June 2010 в 15:51
поделиться

, чтобы поместить \n в двойные кавычки, попробуйте


$LOG = str_replace('\n', "\n", $LOG);
2
ответ дан Lal 10 June 2010 в 15:51
поделиться

Если вы хотите напечатать что-то вроде этого с новой строкой (\ n) после него:

<p id = "theyateme">Did it get eaten?</p>

Чтобы напечатать выше, вы должны сделать это:

<?php
  print('<p id = "theyateme">Did it get eaten?</p>' . "\n");
?>

клиентский код сверху будет:

<p id = "theyateme">Did it get eaten?</p>

Вывод сверху будет:

Его съели?

Я знаю, это сложно, но я всегда делают это таким образом, и вы почти всегда должны делать это таким образом.

Иногда вы хотите, чтобы PHP печатал \ n на странице вместо перевода новой строки, как в коде JavaScript (сгенерированном PHP).

ПРИМЕЧАНИЕ об ответе: Вы можете подумать: почему вы использовали печать вместо эха (мне нравится мое эхо). Это потому, что я предпочитаю print, а не echo и printf, потому что в некоторых случаях это работает лучше (обычно в моих случаях), но в этом случае это можно сделать с помощью echo.

0
ответ дан Ewer Ling 10 June 2010 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: