2012-03-04 95 views
11

我做了一個功能,刪除換行符與PHP沒有成功,我tryed所有替換代碼,我仍然得到這些換行符,我創建一個JSON文件,我不能用jquery從jsonp中讀取它,因爲這些換行符似乎打破了這一切。PHP刪除換行符或CR LF沒有成功

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

當我看源,有一些換行符在所有HREF,IMG和Br appening這是一個json_encode輸出 例如:

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

換行符AFER一個。 它hapenig到IMG SRC和BR

的唯一途徑,我可以刪除這些打破它與

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

但你understant,有沒有留在所有字符串的空間,這不是我們想要的。

+0

感謝的爲所有,但到現在爲止,這些解決方案的工作。但通常大多數這些解決方案應該工作,但我不明白爲什麼我的情況下它不 – Gino 2012-03-12 15:32:55

+0

我發現修復它的唯一方法是 '$ allcontent = preg_replace('/ Gino 2012-03-22 03:53:14

+0

I hit the same and no solutions in this post worked for me. I found another similar post and this solution worked for me...hence posting it here: http://stackoverflow.com/a/3340510/405117 – Vikram 2012-08-01 20:39:45

回答

0

使用json_encode()json_decode()從JSON擴展處理JSON德/序列化任務:

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

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

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

這種更換工作更好地爲我:

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

As a note, in the case of e-mails and other MIME encodings, simply replacing '\r\n' (CRLF) with '\n' should work fine. – 2013-05-03 17:47:45

0

也許你可以嘗試通過遍歷文本字符字符和每個電話ord(),所以你可以看到這些突破字符是否真的\r,\n

最近我遇到了一個類似的問題,其結果是一個不可破壞的空間,甚至沒有在ASCII表(ord代碼194或其他)中的空白。

如果你有興趣我的解決辦法是要設法過濾器斷裂,但過濾除什麼預計將在文本,像這樣的一切:

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

hi Tony, this did nothing for me – Gino 2012-03-04 22:57:02

1

如何:

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

事實上,如果不是像這樣清理JSON文件,您可以使用json_encode來創建它,您將在之前的步驟中解決此問題。

+0

Oops, the original code had a big mistake. I have edited right now... – 2012-03-04 21:21:57

+0

not working, i don't understand why with all these replace code my json output give me 14 line instead of one. my json output work on many domains and many host, but for this domain (Wordpress website) it give me line break – Gino 2012-03-04 23:02:33

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爲最常用的那些。

+0

it's crazy but nothing apear. by the way, the json_encode is called this way 'echo $_GET['jsoncallback'].'('.json_encode(array('posts' => $ posts))'。) 「;' – Gino 2012-03-04 23:50:55

1

如何以下

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

第一部分\s*[\r\n]+\s*將取代任何換行符,它的前導空格和它的拖尾空間逼到一個空間。

第二部分\s+將空間縮小到一個空間。

然後trim()刪除前導/尾隨空間。

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

工作正常。

0

如果你想刪除的CR和保持的LF,這真的很簡單(只是常識):

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