Сохранение входит в пользовательский ввод PHP - PullRequest
0 голосов
/ 22 августа 2009

Как сохранить "записи", указанные пользователем в базе данных, и показать их затем другим пользователям?

Я храню вопрос о пользователе и использую следующие функции для очистки пользовательских данных, их подготовки и выполнения команды SQL соответственно.

 pg_escape_string
 pg_prepare
 pg_execute

Я использую htmlentities с ENT_QUOTES для преобразования данных HTML. Эта процедура удаляет все записи, по-видимому, в виде \ n, в вопросе.

Я хотел бы иметь такую ​​же систему вопросов, как в SO: показывать пользователям только двойной ввод при переносе строк.

Ответы [ 2 ]

7 голосов
/ 22 августа 2009

После того, как вы позвоните htmlentities(), позвоните nl2br(). Веб-браузер игнорирует простые символы новой строки, поэтому вам необходимо преобразовать их в <br /> элементы, чтобы они отображались.

nl2br - вставляет разрывы строки HTML перед всеми новыми строками в строке

Описание

string nl2br ( string $string [, bool $is_xhtml= true ] )
Возвращает строку с <br /> или <br>, вставленными перед всеми переводами строки.

Например:

echo nl2br(htmlentities($input));

Чтобы показывать только двойные новые строки и игнорировать одиночные, вместо этого можно использовать более сложную функцию замены строк, preg_replace:

echo preg_replace('/\n\s*\n/', "<br />\n<br />\n", htmlentities($input));

Здесь '/\n\s*\n/' соответствует новой строке, за которой следует любое количество пробелов, а затем еще одна новая строка. Он заменяет любую такую ​​подстроку двумя <br /> элементами. Одиночные символы новой строки игнорируются. Это также хорошо, потому что он игнорирует посторонние пробелы и вкладки, которые невидимы, например, если пользователь напечатал это:

Это абзац. \n
Это довольно короткий. \n
<space><tab>\n
Вот еще один абзац. \n
Это тоже коротко.

3 голосов
/ 22 августа 2009

PHP-функция nl2br () должна сделать свое дело и позволить вам конвертировать \ n символов в <br> HTML-теги.

Чтобы включить поведение «два ввода для новой строки», вы должны запустить регулярное выражение, чтобы превратить каждую пару последовательных тегов <br> в один тег <br> (вы также можете сделать это с \ n символами перед запуском nl2br () по тексту).

...