2012-09-19 53 views
9

當重編使用PHP preg_replace函數替換行中斷

$arr=array_values($arr); // renumber array 

陣列我意識到,換行符被引入到陣列中的字符串,其中我不想之一。

物業 類型

物業

類型

在任何情況下,我使用:

$newelement=preg_replace("/[^A-Za-z0-9\s\s+]/"," ",$element); 

已經刪除不需要的

我的字符串是從去在插入數據庫之前加入charchters所以我試圖將其更改爲:

$newelement=preg_replace("/[^A-Za-z0-9\s\s+'<br>''<br>''/n''/cr']/"," ",$element); 

但有沒有變化,換行/換行/回車仍然存在?

我正在做preg_replace嗎?

+0

換行符是\ n或根據操作系統上\ r或\ r \ n。 'str_replace(array('\ r \ n','\ n','\ r'),'',$ text)' – Horen

+0

您需要解決底層問題,而不是嘗試修補它; 'array_values'不會更改這些值,請參閱此示例:http:// codepad。org/Mhbzjkl8 – jeroen

回答

20

那個preg看起來有點複雜。然後,您在開始時將^作爲非A-Z ..或換行符。所以你不想取代換行?

如何

$newelement=preg_replace("/[\n\r]/","",$element); 

$newelement=preg_replace("/[^A-Za-z ]/","",$element); 

\ S也匹配換行符(\ n)的

+1

對於第一個替代'/ \\ [nr] /'將是一個更精確的模式。如果沒有反斜槓,它將會替換字母'n'或'r'。 –

4

,這可能也起作用:

// char(32) is whitespace 
// for CR 
$element = strtr($element, chr(13), chr(32)); 

// for LF 
$element = strtr($element, chr(10), chr(32)); 
2

這件事情工作了我。

preg_replace("/\r\n\r\n|\r\r|\n\n/", "<br />", $element); 

(編輯補充丟失的斜槓)

1

這是黑客攻擊,但你可以做這樣的事情:

$email_body_string = preg_replace("/\=\r\n$/","", $email_body_string); 

更換說發現有一個等號結束的行,並具有標準的回車換行字符後綴。將這些字符替換爲空白(「」),等號將消失,其下方的行將被拉起以加入第一行。

現在,這意味着你永遠不會有以等號結束的行,這是一個風險。如果你想做得更好,請檢查換行(等號)出現的行長。從行首開始通常大約有73個字符。然後,你可以說:

if (strlen(equals sign) == 73) 
     $email_body_string = preg_replace("/\=\r\n$/","", $email_body_string);