PHP preg_replace 替换换行符

20

当使用重新编号对数组进行重排时

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

我注意到一个数组字符串中出现了换行符,而我不想要它。

我的字符串从:

Property
Type

变成了 Property

Type

无论如何,我正在使用:

$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) - Horen
你需要修复潜在的问题,而不是试图打补丁;array_values 不会改变值,请参考这个例子:http://codepad.org/Mhbzjkl8 - jeroen
4个回答

42

那个 preg 看起来有点复杂。而且你在开头用了 ^ 来表示不是 A-Z... 或换行符。所以你不想替换换行符?

那这样怎么样?

$newelement = preg_replace("/[\n\r]/", "", $element);
或者
$newelement = preg_replace("/[^A-Za-z ]/", "", $element);

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


2
对于第一种选择,/\\[nr]/ 是一个更精确的模式。如果没有转义这些反斜杠,它将替换字母'n'或'r'。 - Brian Wood

6

这也应该可以工作:

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

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

4
这个东西对我很有用。
preg_replace("/\r\n\r\n|\r\r|\n\n/", "<br />", $element);

1
这是一个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);

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