繁体   English   中英

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

[英]PHP remove line break or CR LF with no success

我做了一个功能,用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);

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

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

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

以下怎么样?

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

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

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

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

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

例如:

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

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

这个怎么样:

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

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

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

工作良好。

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

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

使用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);

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

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

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

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

我使用的方法是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是最常用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM