Textarea不会从DB渲染换行符

时间:2015-06-12 23:48:28

标签: javascript php html mysql

我在网页上有两个 @IBAction func addButton(sender: AnyObject) { if whoTookTextField == nil || imageSelected == nil { return } if imageSelected == nil { return } let entityDescription = NSEntityDescription.entityForName("PhotoListEntity", inManagedObjectContext: moc) let name = NSManagedObject(entity: entityDescription!, insertIntoManagedObjectContext: moc) name.setValue(whoTookTextField.text, forKey: "whoTook") if let navigation = self.navigationController { navigation.popViewControllerAnimated(true) } } 元素。当用户在 first <textarea>中提交文本时,文本将插入到数据库中。然后从数据库中检索文本,并使用Javascript将其存储在 second <textarea>中。

如果数据库中的字符包含换行符,则第二个textarea不会呈现文本。

如果我输入一个没有换行符的单词,一切都很有效:

enter image description here

但是以下一个不起作用。

enter image description here

<textarea>
var_dump($output)

    n
    e
    w
    l
    i
    n
    e

我的代码:

HTML

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

PHP

<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>

1 个答案:

答案 0 :(得分:2)

问题是您的PHP代码输出格式错误的JavaScript字符串文字。

根据ECMA-262,双引号字符串文字可以包含任何源字符,但双引号"),反斜杠除外( \)和 LineTerminator 字符,其中 LineTerminator 是其中之一

  • \u000A(换行)
  • \u000D(回程)
  • \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()文档在评论部分中有类似的解决方案。

当然,更简单的解决方案是直接从PHP输出<textarea>值:

<?php

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

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

_;

但我猜你的情况可能会有点复杂。