【问题标题】:outputting \r\n after text is decoded - PHP文本解码后输出 \r\n - PHP
【发布时间】:2012-05-07 09:49:18
【问题描述】:

我正在构建一个应用程序,用户可以在其中将注释输入文本区域。然后在输入数据库时​​对注释进行编码。当我解码返回值时,nl2br 函数不起作用。它不会用 br 标签替换 \r\n 。当不编码/解码文本时,它可以工作。

我正在使用以下代码对我的信息进行编码/解码:http://www.myphpscripts.net/tutorial.php?id=9

如果我进入一个文本区域:

Hello  
World

先编码,解码后返回

Hello\r\nWorld.

我可以执行 str_replace,但据我了解,根据浏览器的不同,textarea 可能会使用 \n 或 \r 而不是 \r\n。

不确定什么是好的解决方案...请帮助!谢谢!

【问题讨论】:

  • 文本存入数据库时​​是否需要编码?
  • 该教程中的代码不会将换行符转换为"\r\n"
  • ianbarker:笔记包含私人数据。出于安全目的,它必须。
  • 该脚本中的编码/解码代码是荒谬的。只需使用真正的加密!
  • 换行符的类型不取决于您使用的浏览器,而是取决于操作系统。 Windows 使用 \r\n,类 unix 系统使用 \n

标签: php encoding str-replace nl2br


【解决方案1】:

如果您要转换的文本位于“

如果您要将文本转换为放置在文本区域中,请使用...

str_ireplace("\r\n", "\n", $db_string); //or something similar

如果您要将文本转换为放置在文本区域之外,请使用...

str_ireplace(array("\r\n", "\n", "\r"), '<br />', $db_string);

不同的浏览器使用任何东西,但我相信它们都只能读取“\n”。但是在旁注中,操作系统确定“\r\n”与“\n”。只需使用“\n”。所以将“\r\n”替换为“\n”。或者只留下“\r\n”,使用任何一个,只要你不将 br 标签放入你的 textarea 标签,你就可以搞定了。

Mac = Linux = \n 窗口 = \r\n

【讨论】:

    【解决方案2】:

    我已经使用 zend studio 7.2.0 在 Windows 操作系统中检查了您的解码字符串 Hello\r\nWorld.。我发现 nl2br() 在两种情况下都可以正常工作\r\n and \n。你应该仔细检查你解码的字符串。可能是你在编码之前正在做addslashes()。如果是这样,那么你必须在使用nl2br()之前使用stripslashes()。

    【讨论】:

    • stripslashes 只会让 Hello\r\nWorld 变成 HellornWorld。
    • 我在做 World
    【解决方案3】:

    您可以使用stripslashes($text) 删除这些内容。但是,我建议找出添加斜线的原因。你在用addslashes吗?

    【讨论】:

    • 不使用加斜杠。当我按回车键并转到 textarea 中的新行时,它会自动添加 \r\n。
    • 是的,但是浏览器会将它们作为实际的 \r\n 字符而不是“\r\n”发送。服务器端正在添加它们,可能是addslashes 甚至是“魔术引号”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2013-04-05
    • 2013-05-27
    • 2019-08-30
    相关资源
    最近更新 更多