【问题标题】:newline question换行问题
【发布时间】:2011-02-20 13:50:07
【问题描述】:

我想在用户向文本区域输入数据时检测回车符或换行符。处理此问题的最佳方法是什么?我尝试使用转义字符进行 str_replace,但未检测到回车和换行符。


好的,假设我在文本区域中输入以下内容:

The summer was hot this year
but next year is supposed to be cooler.

我想检测 CR。在这种情况下,有一个。

【问题讨论】:

  • 你能把你的代码粘贴到你试过str_replace的地方吗?
  • 定义“检测”。 str_replace 和检测有什么关系?它取代了事物。
  • 你应该发布你尝试过的代码。很可能这不是你想要的方法,而是为了纠正你的实现中的错误。
  • 您希望操作的最终结果是什么?您是否希望所有回车符和换行符都消失,是否要将回车符后跟换行符替换为换行符?从你的问题看不清楚。

标签: php


【解决方案1】:

换行符可以是 \r、\r\n 或 \n,具体取决于客户端。

$input = preg_replace('/\r\n?/',"\n",$input)

会将所有换行符标准化为“\n”,无论它们来自何处。

【讨论】:

  • 这就是我真正想要发布的内容
  • 好吧,如果我没记错的话,现在可能不是 \r 而是在过去的 Mac 之前 OSX 使用回车
  • Mac OS 到版本 9 使用单个 \r 换行。
  • 问题不在于操作系统。这是关于在浏览器中填充的文本区域。
  • 我对问题的理解是$input来自客户端,我们要查找换行符。换行符的形式取决于客户端的操作系统。我们不关心操作系统是什么,但我们确实关心换行符在哪里。
【解决方案2】:

你可以用 str_replace 做这样的事情:

function replace_newline($string) {
  return (string)str_replace(array("\r", "\r\n", "\n"), '', $string);
}

【讨论】:

  • 嘿文斯,我已经找到了那个帖子,但它不起作用。让我在上面发布一个示例。
【解决方案3】:

新行的存储方式有多种。 有些系统仅使用"\n",有些系统使用"\r",有些系统同时使用"\r\n"。您需要同时检查"\r""\n"

【讨论】:

  • 谢谢迈克尔。两种方法我都试过了,都没有检测到。
  • Michael,如果我使用 str_replace 对两个转义字符进行测试并且它不起作用,我还能做些什么吗?
  • 至少需要有\r\n。除非它以某种方式自动解析并且它只包含 <br /><br> 你能发布你的代码吗?
【解决方案4】:

试试下面的。它一直对我很有魅力。

你需要替换\n AND \r,这是因为linux系统和windows系统使用不同的换行符。

$input = str_replace(array("\n","\r"),'',$input);

【讨论】:

    【解决方案5】:

    或者检查 chr(10) 并替换它

    【讨论】:

      【解决方案6】:

      您是否尝试过preg_replace,因为它可以用于正则表达式替换,然后您可以使用\n\r 或您需要的任何组合进行替换,尽管我相信 str_replace 也应该可以正常工作。

      【讨论】:

      • 除非我在这里做错了什么,否则没有任何效果。如果我有一个段落被分解为 4 行,我需要检测 3 个 CR
      • 您能否发布您的代码,可能是您的代码中的其他问题,因为发布的示例应该可以正常工作。
      【解决方案7】:
      function replace_newlines($string) {
          return preg_replace('/\r\n|\r|\n/', '', $string);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-05-17
        • 2014-02-08
        • 2021-05-29
        • 2018-11-19
        • 2016-03-09
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多