3

编辑:重新阅读我的帖子后,我想我有点不清楚问题是什么。让我尝试重新措辞:

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

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

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


原始问题:

我有一个 Web 表单,其中包含一个用于留下评论的 textarea 字段,我希望它能够使用<br />. 下面是一个简单的例子:

屏幕转储
(来源: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”部分中为“meta”和“link”使用 XHTML 的“self-closure”标签可能会导致解析器推断“head”部分的结尾和“body”部分的开头" 部分(其中不允许使用“链接”和“元”;因此报告了错误)。

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

4

4 回答 4

2

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

于 2009-04-16T12:53:53.490 回答
2

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

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

&lt;br /&gt;
于 2009-04-16T12:54:47.653 回答
1

DTD

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

在您页面的 XHTML 代码中,a<textarea>只能包含文本 ( #PCDATA),并且您不能在<textarea>.

你的问题似乎显示了两种不同的东西。图像显示“ <br />”写入<textarea>,而来自 W3C 验证器的消息是指在<br />元素内写入页面 XHTML 的<textarea>元素。

在第一种情况下,Test<br />line break在文本区域向用户显示“”是通过使用适当的实体来完成的,正如altCognito所写:

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

用户输入的任何内容,然后在<textarea>新页面的 a 中重新显示,都应该进行编码(即,将实体用于&"'<>)。

如果要显示用户的条目:

测试<br />换行符

...作为...

测试
换行符

...在另一个文本区域中,您将需要解析输入到原始文本中的内容,<textarea>并将用户输入<br />的 s 替换为正常的换行符。见卢塞罗的回答

于 2009-04-16T13:59:19.590 回答
1

我只是这样做并且有效。

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
于 2013-03-04T21:32:36.763 回答