【问题标题】:PHP preg_replace replacing line breakPHP preg_replace 替换换行符
【发布时间】:2020-07-19 03:28:06
【问题描述】:

当使用重新编号数组时

$arr=array_values($arr); // Renumber array

我意识到在其中一个数组字符串中引入了换行符,这是我不想要的。

我的字符串来自:

物业 类型

到属性

类型

无论如何我都在使用:

$newelement = preg_replace("/[^A-Za-z0-9\s\s+]/", " ", $element);

在插入数据库之前已经删除了不需要的字符,所以我尝试将其更改为:

 $newelement = preg_replace("/[^A-Za-z0-9\s\s+'<br>''<br>''/n''/cr']/", " ", $element);

但是没有变化,换行/换行/回车还在。

我的 preg_replace 调用是否正确?

【问题讨论】:

  • 换行符是 \n 或 \r 或 \r\n 取决于操作系统。 str_replace (array('\r\n', '\n', '\r'), ' ', $text)
  • 您需要解决根本问题,而不是试图修补它; array_values 不会更改值,请参见此示例:codepad.org/Mhbzjkl8

标签: php regex


【解决方案1】:

那个 preg 看起来有点复杂。然后你在开头有 ^ 作为 not A-Z... 或换行符。所以你不想替换换行符?

怎么样

$newelement = preg_replace("/[\n\r]/", "", $element);

$newelement = preg_replace("/[^A-Za-z ]/", "", $element);

\s 也匹配换行符 (\n)。

【讨论】:

  • 对于第一个替代方案/\\[nr]/ 将是一个更精确的模式。如果没有转义这些反斜杠,它将替换字母“n”或“r”。
【解决方案2】:

这应该也可以:

// char(32) is whitespace
// For CR
$element = strtr($element, chr(13), chr(32));

// For LF
$element = strtr($element, chr(10), chr(32));

【讨论】:

    【解决方案3】:

    这件事对我有用。

    preg_replace("/\r\n\r\n|\r\r|\n\n/", "<br />", $element);
    

    【讨论】:

      【解决方案4】:

      这是一个 hack,但你可以这样做:

          $email_body_string  = preg_replace("/\=\r\n$/", "", $email_body_string);
      

      替换表示找到以等号结尾的行,然后具有标准的回车和换行字符。将这些字符替换为空(“”),等号将消失。它下面的线将被拉起加入第一行。

      现在,这意味着您永远不会有以等号结尾的行,这是一种风险。如果您想做得更好,请检查出现换行(带有等号)的行长。通常从行首开始大约有 73 个字符。那么你可以说:

          if (strlen(equals sign) == 73)
             $email_body_string  = preg_replace("/\=\r\n$/", "", $email_body_string);
      

      【讨论】:

        猜你喜欢
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多