可以在textarea字段中添加换行符,同时保持XHTML 1.0有效吗?

问题描述 投票:3回答:4

编辑:重新阅读我的帖子后,我觉得我有点不清楚问题是什么。让我试着重新说一下:

用户可以使用表单中的textarea字段在我的网站上发表评论。应该可以使用<br />在注释中添加换行符。然后将注释作为字符串存储在mysql数据库中(转义以使其安全),然后从数据库中检索并显示在站点上。显示注释时,无法识别常规换行符。

用户可以编辑他们的评论,在这种情况下,原始评论将显示在要修改的textarea字段中(参见下图)。问题是,如果存在任何<br />,则代码无效为XHTML 1.0(请参阅下面的错误消息)。

我可以使用任何其他类型的换行符使代码有效吗?如注释中所述,常规换行符与xml:space =“preserve”组合不起作用(换行符显示在textarea字段中,但在注释显示为站点上的普通文本时则不行。)


原始问题:

我有一个网页表单,其中包含一个textarea字段来发表评论,我希望它能够使用<br />添加换行符。下面是一个简单的例子:

screen dump (来源:shipit.se

它按预期工作,但在使用W3C验证服务时,它不会验证为XHTML 1.0过渡。这是我得到的错误:

  1. 错误行90,列1587:文档类型不允许元素“br”在这里

…ription" rows="0" cols="0">Test<br />line break</textarea></dd><dt class="cha

上面提到的元素是在不允许的上下文中找到的。这可能意味着您有错误的嵌套元素 - 例如“body”部分中的“style”元素而不是“head”内部 - 或者两个重叠的元素(不允许)。

导致此错误的一个常见原因是在HTML文档中使用XHTML语法。由于HTML的隐式闭合元素规则,此错误可以创建级联效果。例如,在HTML文档的“head”部分中使用XHTML的“自闭”标签“meta”和“link”可能会导致解析器推断出“head”部分的结尾和“body”的开头“section(不允许使用”link“和”meta“;因此报告错误)。

有没有办法让换行有效代码,或者我是否需要找到一种解决方法(例如在textarea字段中使用特定标签换行,然后在显示评论时用<br />替换它们)?

xhtml w3c-validation line-breaks
4个回答
1
投票

来自DTD

<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->

在页面的XHTML代码中,<textarea>只能包含文本(#PCDATA),并且您不能在<textarea>中嵌套任何XHTML元素。

你的问题似乎表明了两件不同的事情。图像显示写入<br />的“<textarea>”,而来自W3C Validator的消息是指在<br />元素内写入页面的XHTML的<textarea>元素。

在第一种情况下,文本区域中的用户看到“Test<br />line break”是通过使用适当的实体来完成的,就像altCognito写道:

<textarea>Test&lt;br /&gt;line break</textarea>

用户输入的任何内容随后将在新页面上的<textarea>中重新显示(即,使用&"'<>的实体)。

如果要显示用户的条目:

Test<br />line休息

...如...

测试 越线

...在另一个文本区域内,然后您需要解析输入到原始<textarea>中的内容并用正常的换行符替换用户输入的<br />s。 See Lucero's answer


2
投票

您是否尝试过添加xml:space="preserve"属性并使用普通的正常换行符?


2
投票

为什么不使用常规的换行符?那些工作很好。

如果要显示<br />,则需要对这些实体进行编码:

&lt;br /&gt;

1
投票

我刚刚这样做并且有效。

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
© www.soinside.com 2019 - 2024. All rights reserved.