我在网页上有两个 @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不会呈现文本。
如果我输入一个没有换行符的单词,一切都很有效:
但是以下一个不起作用。
的
<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>
答案 0 :(得分:2)
问题是您的PHP代码输出格式错误的JavaScript字符串文字。
根据ECMA-262,双引号字符串文字可以包含任何源字符,但双引号("
),反斜杠除外( \
)和 LineTerminator 字符,其中 LineTerminator 是其中之一
\u000A
(换行)\u000D
(回程)\u2028
(行分隔符)\u2029
(段落分隔符)您需要将这些字符转换为合适的JavaScript转义序列,并且还必须转换HTML文档中具有特殊含义的<
和&
字符。
大多数字符都是简单的ASCII字符,这使得使用strtr()
替换翻译表变得微不足道,假设您的HTML文档使用了合理的(ASCII兼容的)字符编码。
“行”和“段落”分隔符比较棘手,因为转换将取决于HTML文档使用的字符编码。如果您使用的是UTF-8,则可以将这些字符添加到翻译表中,如下所示:
<?php
$conversion = array (
'<' => '<',
'&' => '&',
'"' => '\\"',
'\\' => '\\\\',
"\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>
_;
但我猜你的情况可能会有点复杂。