PHP删除换行符或CR LF没有成功

时间:2012-03-04 19:31:03

标签: php preg-replace line-breaks

我做了一个功能,用PHP删除换行没有成功,我尝试了所有替换代码,我仍然得到这些换行符,我创建了一个json文件,我无法从jsonp读取它与jquery因为这些行休息似乎打破了这一切。

function clean($text)
{
$text = trim( preg_replace( '/\s+/', ' ', $text ) );  
$text = preg_replace("/(\r\n|\n|\r|\t)/i", '', $text);
return $text;
}

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

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

断线a。 img src和br

是hapenig

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

打破它
$text = preg_replace("/\s/i", '', $text);

但是你明白所有字符串中都没有空间,这不是我们想要的。

9 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:1)

这个怎么样:

function clean($text)
{
    $parts = explode(' ', $text);
    foreach ($parts as $key => $value)
        $parts[$key] = preg_replace('/\s/', ' ', $value);
    return implode(' ', $parts);
}

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

答案 2 :(得分:1)

以下

怎么样?
function clean($text)
{
    return trim(preg_replace("/(\s*[\r\n]+\s*|\s+)/", ' ', $text));
}

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

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

然后trim()删除前导/拖尾空间。

答案 3 :(得分:1)

尝试将默认修剪功能与“ character_mask”一起使用。

例如:

$text = trim($text, " \t\n\r\0\x0B"); 

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

答案 4 :(得分:0)

使用JSON扩展中的json_encode()json_decode()来处理JSON de / serialization任务:

$myobj = array( 'foo' => 'bar', 'foz' => 'baz')

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

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

答案 5 :(得分:0)

也许你可以尝试按字符逐行处理文本并在每个字符上调用ord(),这样你就可以看到这些中断字符是否真的是\r,\n s?

最近我遇到了一个类似的空白问题,结果是一个不可破坏的空间,甚至在ASCII表中都没有(ord代码194或其他东西)。

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

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

答案 6 :(得分:0)

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

这样做可以让您查看哪些字符导致文本中断,并适当地替换它们。例如,如果您的文本有“\ n”,那么当您使用此代码时,它将在其位置显示“\ n”。示例:

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

会变成:

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

当然,可以使用大量其他破坏字符,但\ r \ n,\ r,\ n和\ t是最常用的。

答案 7 :(得分:0)

function clean($text)
{
    return trim(preg_replace('/\\\\r|\\\\n|\\\\t/i', ' ', $text));
}

工作正常。

答案 8 :(得分:0)

如果你想删除CR并保留LF,那真的很简单(只是常识):

$text = str_replace("\r", "", $text);