У меня есть PHP-скрипт, который отображает форму HTML, которая позволяет пользователю вводить данные в <textarea>
и хранить их в MySQL.
Пользователь (я) ввел несколько строк текста в <textarea>
которые включали в себя \n
, \r
и 4 последовательных символа пробела (для отступов списка, который я делал). Например:
first line of text:
second line of text:
(A) some task
(B) another task
Когда форма была отправлена, содержимое было правильно сохранено в MySQL, включая скрытые символы \r
, \n
и четыре пробела перед (A)
и (B)
.
Однако var_dump()
-ing данные на PHP показывают это:
first line of text.\r\nsecond line of text:\r\n (A) some task\r\n (B)another task
Четыре введенных пробела (U + 0020) не отображаются между символами \r\n
и (A)
, есть только один пробельный символ. Я даже запускал данные через конвертер с шестнадцатеричным преобразованием, и он показывал только один U+0020
перед каждым (A) и (B) вместо четырех U+0020
s. Но, когда я повторно открываю форму для редактирования данных в <textarea>
, контент отображается правильно, только я ввел его первоначально, с 4 пробелами перед (A)
и (B)
.
Мои скрипты ведут себя правильно, и проблем нет. Мне просто интересно: как MySQL и <textarea>
могут обнаружить 4 пробела, но var_dump()
обнаруживает только одно пространство?
Вот что я пытался обнаружить 4 пространства в PHP, с данными, хранящимися в $Variable
PHP $Variable
:
var_dump($Variable)
-ing непосредственно перед и после хранения данных в MySQL, до/после stripslashes()
и до/после вывода данных в <textarea>
и все var_dump()
не обнаруживают обнаружение 4 пробелов.strpos($Variable)
обнаруживает 4 пробела.print_r($Variable)
не обнаруживает 4 пробела.echo $Variable
не обнаруживает скрытых символов, кроме одиночных пробелов (а не 4 последовательных пробела)Когда вы var_dump переменную, отображается тот же HTML.
Если вы хотите показать пробелы, вы можете добавить white-space:pre-wrap
.
Свойство CSS с white-space
определяет, как обрабатывается пробел внутри элемента. Чтобы слова сломались внутри себя, вместо этого используйте overflow-wrap, word-break или дефис.
С предварительной упаковкой сохраняются последовательности пробелов. Строки разбиваются на символы новой строки, в <br>
и, если необходимо, заполнять линейные поля.