У меня есть форма в html, где пользователь может поместить текст в текстовую область.
Я сохраняю содержимое текстовой области в базе данных MySQL (в поле типа TEXT).
Затем я где-то в своем приложении мне нужно загрузить этот текст и поместить его в массив, где в каждом индексе будет одна строка текста.
<textarea rows="10" cols="80"> Row one Row two Row tree </textarea> array (output in "php pseudocode"): $array = array(); $array[0] = Row one; $array[1] = Row two; $array[2] = Row tree;
Как я это делаю: я сохраняю его в db, затем загружаю его и использую:
$br = nl2br($string,true); $array = explode("<br />", $br);
Причина, по которой я использую nl2br , я хочу избежать проблем с концом строк текста с разных платформ. Я имею в виду / n или / r / n.
Но в моем решении должна быть ошибка где-то, потому что она не работает (массив $ array пуст).
Лучшее решение, вероятно, каким-то образом разделило бы его на массив с помощью взрыва или что-то подобное с шаблоном для разрывов строк, но здесь снова возникает проблема с начала разрывов строк, которые я не знаю, как их решить ( проблемы с \ n или \ r \ n ).
Может ли кто-нибудь дать мне совет? Благодарю.
Я предлагаю вам пропустить nl2br
пока вы не будете готовы отправить данные клиенту. Чтобы решить вашу проблему:
// $string = $get->data->somehow(); $array = preg_split('/\n|\r\n/', $string);
Когда вы получаете ввод в своем скрипте, нормализуйте символы конца строки до PHP_EOL перед сохранением данных в базе данных. Это проверено правильно для меня. Это еще один шаг в процессе ввода фильтра. Вы можете найти другие строки символов EOL, но они наиболее распространены.
<?php // RAY_temp_user109.php error_reporting(E_ALL); if (!empty($_POST['t'])) { // NORMALIZE THE END-OF-LINE CHARACTERS $t = str_replace("\r\n", PHP_EOL, $_POST['t']); $t = str_replace("\r", PHP_EOL, $t); $t = str_replace("\n", PHP_EOL, $t); $a = explode(PHP_EOL, $t); print_r($a); } $form = <<<FORM <form method="post"> <textarea name="t"></textarea> <input type="submit" /> </form> FORM; echo $form;
Взорвите на PHP_EOL и пропустите часть nol2br (). Вы можете использовать var_dump () для просмотра результирующего массива.