2015-06-12 2 views
-1

У меня есть два элемента <textarea> на веб-странице. Когда пользователь отправляет текст в сначала<textarea>, текст вставляется в базу данных. Затем текст извлекается из базы данных и сохраняется в второй<textarea> с использованием Javascript.Textarea не отображает новую строку из DB

Вторая текстовая область не отображает текст, если символы из базы данных содержат символы новой строки.

Если я печатаю слово без перевода строки, все отлично работает:

enter image description here

Но следующий один не работает.

enter image description here

var_dump($output) для

n 
    e 
    w 
    l 
    i 
    n 
    e 

является

string(19) "n e w l i n e" 

Мой код:

HTML

<form action="" method="get"> 
    <textarea name="input" rows="5"></textarea> <br> 
    <input type="submit" name="go"><br> 
    <textarea name="output" id="id_ouput" rows="5"></textarea> 
</form> 

PHP

<?php 
... 
... 
$input=$_GET['input']; 

$insert = $koneksi->query("insert into data values ('".$input."')"); 
$select = $koneksi->query("SELECT * FROM data"); // data is column 
foreach ($select as $tampung){ 
    $output = $tampung['text']; 
} 

// use JS to access <textarea>' value attribute 
?> 
    <script> 
     document.getElementById('id_ouput').value= "<?php echo $output ?>"; 
    </script> 
<?php 

... 

?> 
+0

Попробуйте включить текстовое поле в '

...
' tags –

+3

что такое фактическая строка? попробуйте сделать echo htmlentities ($ output), ' – twentylemon

+0

@SaumilSoni, он тоже не работает. –

ответ

2

Проблема заключается в том, что ваш PHP код выводит уродливая строку JavaScript буквальной.

Согласно ECMA-262, двойной кавычки Строка может содержать любой исходный символ, за исключением кавычками (") обратной косой (\) и КонцомСтроки символов, где КонцаСтроки является одним из

  • \u000A (линия подачи)
  • (возврат каретки)
  • \u2028 (линейный сепаратор)
  • \u2029 (Абзац сепаратор)

Вы должны преобразовать эти символы в подходящие JavaScript экранирующие последовательности, и вы также должны преобразовать < и & символы, которые имеют особое значение в документе HTML.

Большинство символов являются простыми символами ASCII, что делает их тривиальными для замены, используя strtr() с таблицей переводов, предполагая, что ваш документ HTML использует разумную (ASCII-совместимую) кодировку символов.

Разделители строк и абзацев сложнее, потому что перевод будет зависеть от того, какой символ кодирует ваш документ HTML. Если вы используете UTF-8, то эти символы могут быть добавлены в таблицу перевода следующим образом:

<?php 

    $conversion = array (
    '<'   => '&lt;', 
    '&'   => '&amp;', 
    '"'   => '\\"', 
    '\\'   => '\\\\', 
    "\r"   => '\\r', 
    "\n"   => '\\n', 
    "\xe2\x80\xa8" => '\\u2028', 
    "\xe2\x80\xa9" => '\\u2029', 
); 

    $output = $tampung['text']; 
    $value = strtr ($output, $conversion); 

    echo <<<_ 
<script> 
    document.getElementById('id_ouput').value="$value"; 
</script> 
_; 

документация PHP addcslashes() имеет аналогичные решения в разделе комментариев.


Конечно, гораздо более простое решение будет выводить значение <textarea> непосредственно из PHP:

<?php 

    $output = $tampung['text']; 
    $value = htmlspecialchars ($output); 

    echo <<<_ 
    <textarea name="output" id="id_ouput" rows="5">$value</textarea> 

_; 

Но я предполагаю, что ваша ситуация может быть немного сложнее.

+1

DUDE YOU THE GENIUS !!! , большинство из предыдущих читателей здесь не понимали об этом, и они думают, что это будет нормально работать. –

+0

О, и большое спасибо, ты спасешь меня T_T. –

+1

@ febri23: Я рад, что это сработало для вас. Это выглядит так, как четыре человека проголосовали на вашем посту, не понимая темы, хотя я думаю, что ваш вопрос может заслужить некоторые разъяснения. –

Смежные вопросы