我做了一个功能,用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);
但是你明白所有字符串中都没有空间,这不是我们想要的。
答案 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");
答案 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);