编辑:重新阅读我的帖子后,我觉得我有点不清楚问题是什么。让我试着重新说一下:
用户可以使用表单中的textarea字段在我的网站上发表评论。应该可以使用<br />
在注释中添加换行符。然后将注释作为字符串存储在mysql数据库中(转义以使其安全),然后从数据库中检索并显示在站点上。显示注释时,无法识别常规换行符。
用户可以编辑他们的评论,在这种情况下,原始评论将显示在要修改的textarea字段中(参见下图)。问题是,如果存在任何<br />
,则代码无效为XHTML 1.0(请参阅下面的错误消息)。
我可以使用任何其他类型的换行符使代码有效吗?如注释中所述,常规换行符与xml:space =“preserve”组合不起作用(换行符显示在textarea字段中,但在注释显示为站点上的普通文本时则不行。)
原始问题:
我有一个网页表单,其中包含一个textarea字段来发表评论,我希望它能够使用<br />
添加换行符。下面是一个简单的例子:
(来源:shipit.se)
它按预期工作,但在使用W3C验证服务时,它不会验证为XHTML 1.0过渡。这是我得到的错误:
- 错误行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 />
替换它们)?
来自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<br />line break</textarea>
用户输入的任何内容随后将在新页面上的<textarea>
中重新显示(即,使用&
,"
,'
,<
和>
的实体)。
如果要显示用户的条目:
Test
<br />
line休息
...如...
测试 越线
...在另一个文本区域内,然后您需要解析输入到原始<textarea>
中的内容并用正常的换行符替换用户输入的<br />
s。 See Lucero's answer。
您是否尝试过添加xml:space="preserve"
属性并使用普通的正常换行符?
为什么不使用常规的换行符?那些工作很好。
如果要显示<br />
,则需要对这些实体进行编码:
<br />
我刚刚这样做并且有效。
<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>