我已经使用\r
和\n
的组合启动了所有操作,但没有成功:
<textarea rows="10" readonly><?php echo 'First line.\r\nSecond line.'; ?></textarea>
使用
和
的连续组合,我能够跨浏览器实现我的目标,但在使用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. 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>
元素中成功生成有效且跨浏览器兼容的回车符?
答案 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>
上面的示例将始终有效,因为它使用连接。如果您不这样做,请注意您使用的引用类型。请记住,双引号可以解析变量和特殊字符,而单引号则不会解决。
考虑这个例子:
<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>