textarea中跨浏览器兼容的回车

时间:2017-03-17 09:28:08

标签: php html css html5 css3

我已经使用\r\n的组合启动了所有操作,但没有成功:

<textarea rows="10" readonly><?php echo 'First line.\r\nSecond line.'; ?></textarea>

使用&#13;&#10;的连续组合,我能够跨浏览器实现我的目标,但在使用w3 Validator进行验证时会出现此HTML5验证错误:

  

错误:数字字符引用展开为回车。

另一方面,使用<textarea>中的常规返回并应用下面的CSS规则,我没有得到验证错误;这种方法面临的挑战是它不是cross-browser compatible(特别是Internet Explorer和Edge都不支持)。

textarea {
    white-space: pre-line;
}

以下是我的<textarea>元素的内容:

<!-- First approach, as described above. -->
<textarea rows="10" readonly><?php echo 'First line.&#13;&#10;Second line.'; ?></textarea>

<!-- Here, the second one, in combination with the white-space: pre-line; CSS rule. -->
<textarea rows="10" readonly><?php echo 'First line.
Second line.'; ?></textarea>

如何在HTML <textarea>元素中成功生成有效且跨浏览器兼容的回车符?

2 个答案:

答案 0 :(得分:2)

根据specification,HTML5文字区域使用 LF 字符表示新行(\n),但他们也会理解&#34;并在内部转换\r\r\n

  

当textarea是可变的时,其原始值应该由   user:用户代理应该允许用户编辑,插入和删除   文本,以及&#34; LF&#34;形式插入和删除换行符;   (U + 000A)字符。

     

(...)

     

由于历史原因,元素的值在三个中被标准化   三种不同目的的不同方式。原始值是   最初设定的价值。它没有正常化。 API值是   值IDL属性中使用的值。它被规范化了   换行使用&#34; LF&#34; (U + 000A)字符。最后,还有表格   提交价值。它被标准化,以便换行使用U + 000D   CARRIAGE RETURN U + 000A LINE FEED(CRLF)字符对,以及   另外,如果需要,给出元素的wrap属性,另外   插入换行符以包装给定宽度的文本。

如果浏览器不支持它,那么它不符合HTML5。

从PHP开始,这应该可以解决问题:

<textarea rows="10" readonly><?php echo 'First line.'.PHP_EOL.'Second line.'; ?></textarea>

Try it!

关于报价

上面的示例将始终有效,因为它使用连接。如果您不这样做,请注意您使用的引用类型。请记住,双引号可以解析变量和特殊字符,而单引号则不会解决。

考虑这个例子:

<textarea id="text-area-A" rows="10" readonly><?php echo 'First line. \n Second line.'; ?></textarea>

<textarea id="text-area-B" rows="10" readonly><?php echo "First line. \n Second line."; ?></textarea>

#text-area-A将打印字符\n,而#text-area-B将&#34;翻译字符&#34;换行。

有关What is the difference between single-quoted and double-quoted strings in PHP?

中引号的更多信息

答案 1 :(得分:0)

根据@CD001的评论中的建议,使用双引号(")而不是单引号(')使其有效。

以下是解决方案,从而产生有效的HTML和跨浏览器兼容的输出:

<textarea rows="10" readonly><?php echo "First line.\r\nSecond line."; ?></textarea>

同样值得注意的是,当使用单引号时,在两个投影行之间连接PHP内置预定义常量PHP_EOL可以有效地用作上面的方法。

以下是使用PHP_EOL

的相同目的的代码段
<textarea rows="10" readonly><?php echo 'First line.' . PHP_EOL .'Second line.'; ?></textarea>