PHP删除换行符或CR LF未成功

PHP删除换行符或CR LF未成功,php,preg-replace,line-breaks,Php,Preg Replace,Line Breaks,我用php做了一个删除换行符的函数,但没有成功,我尝试了所有替换代码,但仍然得到了这些换行符,我创建了一个json文件,但我无法用jquery从jsonp中读取它,因为这些换行符似乎破坏了所有代码 function clean($text) { $text = trim( preg_replace( '/\s+/', ' ', $text ) ); $text = preg_replace("/(\r\n|\n|\r|\t)/i", '', $text); return $text; }

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

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_编码输出 例如:

<a
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">
但是您知道,所有字符串中都没有剩余的空间,这不是我们想要的。

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

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

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

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

这个替代品对我更有效:

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

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

最近,我遇到了一个类似的问题,就是一个空白,它被证明是一个不可破坏的空间,甚至不在ASCII表中(ord代码194或其他)

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

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

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

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

我使用的方法是
echo str\u replace(数组('\r\n','\r','\n','\t'),数组('\\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是最常用的字符。

下面的情况如何

function clean($text)
{
    return trim(preg_replace("/(\s*[\r\n]+\s*|\s+)/", ' ', $text));
}
第一部分
\s*[\r\n]+\s*
将替换任何换行符,它的前导空格和尾随空格将仅替换为一个空格

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

然后
trim()

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

工作正常。

如果您想移除CRs并保留LFs,它非常简单(只是常识):


尝试使用带有“字符屏蔽”的默认修剪功能

例如:

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

阅读官方文档

hi Tony,这对Meno的工作没有任何帮助,我不明白为什么用所有这些替换代码我的json输出给我14行而不是一行。我的json输出在许多域和许多主机上工作,但对于这个域(Wordpress网站)它给我换行符这很疯狂,但没什么特别的。顺便说一下,json_编码是这样命名的
echo$\u GET['jsoncallback'].('.json_编码(数组('posts'=>$posts))。)“;
谢谢大家,但直到现在,这些解决方案都不起作用。但通常这些解决方案中的大多数都应该起作用,但我不明白为什么在我的案例中,我发现解决它的唯一方法是
$allcontent=preg\u replace。”(“/并且确实找到并替换imgsrc,我找到了相同的解决方案,但这篇文章中没有任何解决方案对我有效。我找到了另一篇类似的文章,这篇解决方案对我有效……因此将其发布在这里:作为说明,对于电子邮件和其他MIME编码,只需替换
\r\n
(CRLF)使用
\n
应该可以正常工作。这是默认行为。为什么要显式声明默认参数值?
$text = str_replace("\r", "", $text);
$text = trim($text, " \t\n\r\0\x0B");