замените \n фактическим кодом символа новой строки

Я извлекаю содержимое из БД, очищенной с помощью mysql_real_escape_string. Соответственно, символы новой строки теперь отображаются как "\n". Проблема в том, что этот контент отображается для пользователей внутри тега ‹ pre >, поэтому я не могу, например, заменить \n на ‹ br/>.

Я полагаю, что мог бы заменить \n фактическим кодом символа utf8, прежде чем вставлять результат внутри ‹ pre>.

Может ли кто-нибудь помочь здесь? Не использовать mysql_real_escape_string на самом деле не вариант из-за политики безопасности.

Спасибо.


person Max    schedule 16.07.2010    source источник
comment
Я немного озадачен, обычно ваши данные должны возвращаться без экранирования. Как вы это описываете, это как если бы данные дважды проходили mysql_real_escape_string() перед сохранением.   -  person R. Hill    schedule 16.07.2010
comment
На самом деле это звучит так, как будто вы чрезмерно дезинфицировали данные, дважды избегая их. Если вы введете mysql_real_escape_string("two\nlines");, в базе данных будет реальный символ \n. Если вы получаете данные, не должно быть необходимости заменять \n обратно. Если вы оставите это таким образом, ожидайте проблем с ' и также.   -  person mvds    schedule 16.07.2010
comment
возможно, вы стали жертвой нелепой функции magic_quote в php — убедитесь, что вы отключили ее, это только сбивает с толку тех, кто знаком с концепцией экранирования.   -  person mvds    schedule 16.07.2010
comment
Действительно, похоже, что данные были экранированы дважды. Я использую Zend_db, и кажется, что он использует mysql_real_escape_string по умолчанию.   -  person Max    schedule 19.07.2010


Ответы (4)


почему нет ...

echo str_replace('\\n', PHP_EOL, "few lines\nof text here,\nblah, blah! etc!");
person Lou    schedule 13.03.2012

Я извлекаю содержимое из БД, очищенной с помощью mysql_real_escape_string. Соответственно, символы новой строки теперь отображаются как "\n"

Если вы ничего не сделали с необработанными данными, извлеченными из базы данных, то проблема заключается в том, что они были дважды «санитизированы» при вставке.

C.

person symcbean    schedule 16.07.2010

Это может немного помочь:

эхо('тест\nтест'); показывает как

тестовый тест

но эхо("тест\nтест"); показывает как

проверить

проверить

person Nico    schedule 16.07.2010
comment
эхо('тест\nтест'); должно отображаться как тест\nтест - person Mark Baker; 16.07.2010

person    schedule
comment
это будет работать как «быстрое решение». Основная причина заключается в том, что данные экранируются дважды - person Max; 19.07.2010
comment
Это не работало, пока я по какой-то причине не использовал двойные кавычки "\n" вместо одинарных кавычек '\n'. - person ᴍᴀᴛᴛ ʙᴀᴋᴇʀ; 01.07.2016