PHP删除换行符或CR LF未成功
我用php做了一个删除换行符的函数,但没有成功,我尝试了所有替换代码,但仍然得到了这些换行符,我创建了一个json文件,但我无法用jquery从jsonp中读取它,因为这些换行符似乎破坏了所有代码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; }
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");