HTML文本框换行符

4

我在 HTML 中有一个文本区域,用户可以在其中输入文本,但是当表单被提交并传递到一个 php 脚本中进行 echo 时,没有任何换行符。知道这一点,我尝试在 echo 之前使用 preg_replace()...

    echo preg_replace("/\n/", "<br />", $_GET["text"]);

但是仍然所有内容都在一行上。

因此,我猜测HTML文本区域使用不同的换行符…有人能否解释一下这个问题?

编辑

好的,我已经找到了问题所在:JavaScript正在剥夺换行符。 在此处查看代码

第二次编辑

感谢Jason解决了这个问题。 我需要做:

    escape(document.getElementById('text'));

不只是:

    document.getElementById('text');

并且换行符被保留,问题得到解决!

2个回答

3
echo nl2br($_GET['text'])

尽管如此,你的 preg_replace 对我很有效!

当您查看源代码时,是否打印了新行?也就是说,在提交表单后,echo $_GET['text']在实际的未格式化的HTML中会看到什么? - Jason
如果我直接 echo $_GET['text'],我会得到所有内容都在一行上...很奇怪... - Entity
你的查询字符串中得到了什么?我在我的查询字符串中得到了 %0D%0A,代替了 \n(空格以 + 替换)。 - Jason
我的查询字符串在表单中加入换行符后,只显示为asdfasdf。以下是代码:http://pastebin.com/raw.php?i=w79aMvSv - Entity
1
哎呀,这不太好。你应该使用 nl2br(htmlspecialchars($_GET['text'])) - kijin
显示剩余4条评论

0
通常在测试任何字符串中的换行符时,我使用/[\n\r]/,以涵盖所有情况。我猜这将匹配换行符。

您可能存在一些奇怪的编码问题,或者在获取GET数据之前换行符被剥离了?该正则表达式将匹配任何换行符,我现在正在为一个Web应用程序使用它(实际上我使用的是'/([^\n\r]+)[\n\r]/',但本质上是相同的东西)。 - Jesse
我想知道你是否也去掉了中断。 - Jason
那似乎就是正在发生的事情...我主要是通过Javascript调用页面...我会将代码粘贴到pastebin上。 - Entity
@Jesse,你提到包括CR和LF是个好主意,但如果你在括号(OR)中包含它们,你最终会得到重复的<br/>。这是因为HTML规范要求浏览器在表单上提交CR和LF两者。你需要像这样的代码:$newItem['about'] = preg_replace('/\r\n/', '<br/>', $newItem['about']); - Collierton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接