关于preg replace:PHP删除换行符或CR LF没有成功

PHP remove line break or CR LF with no success

我做了一个函数用 php 删除换行符但没有成功,我尝试了所有替换代码,但我仍然得到这些换行符,我创建了一个 json 文件,但由于这些行,我无法使用 jquery 从 jsonp 读取它break 似乎打破了一切。

1
2
3
4
5
6
7
8
9
10
function clean($text)
{
$text = trim( preg_replace( '/\\s+/', ' ', $text ) );  
$text = preg_replace("/(\
\
|\
|\
|\\t)/i"
, '', $text);
return $text;
}

当我查看源代码时,所有 href、img 和 br 中都出现了一些换行符
这是一个 json_encode 输出
示例:

1
2
<a
href="http:\\/\\/example.com\\/out\\/content\\/" title="link to content website">

a 之后的换行符。
很适合 img src 和 br

我可以删除这些的唯一方法

1
$text = preg_replace("/\\s/i", '', $text);

但你知道所有字符串中都没有空格,这不是我们想要的。


这个替换对我来说效果更好:

1
2
3
4
5
= str_replace (array("\
\
"
,"\
"
,"\
"
), ' ', $text)


尝试使用带有"character_mask"的默认修剪功能。

例如:

1
2
3
$text = trim($text," \\t\
\
\\0\\x0B"
);

阅读官方文档http://php.net/manual/ru/function.trim.php


这个怎么样:

1
2
3
4
5
6
7
function clean($text)
{
    $parts = explode(' ', $text);
    foreach ($parts as $key => $value)
        $parts[$key] = preg_replace('/\\s/', ' ', $value);
    return implode(' ', $parts);
}

确实,如果不是像这样清理 JSON 文件,您可以使用 json_encode 来创建它,您将在上一步中解决此问题。


下面怎么样

1
2
3
4
5
6
function clean($text)
{
    return trim(preg_replace("/(\\s*[\
\
]+\\s*|\\s+)/"
, ' ', $text));
}

第一部分 \\s*[\
\
]+\\s*
将替换任何换行符,它是前导空格,它只是将空格拖到一个空格中。

第二部分 \\s+ 将空格缩小为一个空格。

然后 trim() 删除前导/尾随空格。


如果你想去掉CR,保留LF,真的很简单(只是常识):

1
2
$text = str_replace("\
"
,"", $text);

1
2
3
4
5
6
function clean($text)
{
    return trim(preg_replace('/\\\\\\\
|\\\\\\\
|\\\\\\\\t/i'
, ' ', $text));
}

工作正常。


我使用的方法是 echo str_replace(array('\
\
', '\
', '\
', '\\t'), array('\\\
\\\
', '\\\
', '\\\
', '\\\\t'), $text);

它的作用是让您查看导致文本中断的字符,并适当地替换它们。例如,如果您有一个"\\
" 破坏你的文本,当你使用这个代码时,它会显示一个"\\
" 代替它。例如:

1
2
<a
href="http:\\/\\/example.com\\/out\\/content\\/" title="link to content website">

会变成:

1
2
<a\
 href="http:\\/\\/example.com\\/out\\/content\\/" title="link to content website">

当然,还有很多其他的中断字符可以使用,但是\\
\\
, \\
, \\
和 \\\\t 是最常用的。


也许您可以尝试逐个字符地遍历文本并在每个字符上调用 ord(),这样您就可以查看这些中断字符是否真的是 \
,\
s?

最近我遇到了一个与空格类似的问题,它甚至在 ASCII 表(或代码 194 或其他东西)内都不是不可破坏的空格。

如果您有兴趣,我的解决方案不是尝试过滤中断,而是过滤除文本中预期的内容之外的所有内容,如下所示:

1
2
$text = preg_replace("/[^ \
a-zа-я0-9`~\\!@#\\$%\\^&\\*\\(\\)_\\+\\-\\=\\[\\]\\{\\}\\\\\\|;\\:'"
,\\.\\/\\<\\>\\?]+/ui","", $text);


使用 JSON 扩展中的 json_encode() 和 json_decode() 来处理 JSON 反序列化任务:

1
2
3
4
5
6
7
$myobj = array( 'foo' => 'bar', 'foz' => 'baz')

$json_myobj = json_encode($myobj);
echo $json_myobj;

$myobj = json_decode($json_myobj);
print_r($myobj);