2011-03-12 122 views
0

我正在創建一個格式化工具,用於從要打印的文章中去除內容。演示可以看到here。完整的源代碼可用here向左格式化文本

現在工具條格式化,也可以通過使用nl2br保留段落我想要做的是能夠將內容左移,只有在內容之間有中斷時纔有段落。

例如:

This
is
the
first
paragraph

Second Paragraph

變爲:

this is the first paragraph

Second Paragraph

我用正則表達式來檢查是否有結尾處有兩個空格,但沒有奏效嘗試這個。下面是一些示例代碼: HTML:

<form method="post" action=""> 
    <textarea cols="68" rows="21" name="textinput"></textarea><br/> 
    <input type="checkbox" name="keep_paragraphs" value="true" checked /> Keep Paragraphs<br/> 
    <input type="checkbox" name="shift_left" value="true" /> Remove whitespace after line unless it ends in two spaces<br/> 
    <input type="submit" value="Submit" /> 
    </form> 

PHP:

$text= $_POST['textinput']; 
     $p= $_POST['keep_paragraphs']; 
     $lb= $_POST['shift_left']; 
     if(get_magic_quotes_gpc()){ 
     $text = stripslashes($text); 
     // strip off the slashes if they are magically added. 
     } 
     $text = htmlentities($text); 
     //if we should keep formatting 
     if($p=="true"){ 
      $text =nl2br($text); 
     } 
     if($lb=="true"){ 
      $text = preg_replace('/\s+/', ' ', trim($text)); 
     } 
echo $text; 

任何幫助將是巨大的

編輯:包括例如

POST textbox = "Hi Jane

How are You doing today

I hope all is well";

最文本將來自電子郵件和其他來源,基本上它需要超級的性別。

回答

1

你需要的是正則表達式,

/(?<!\r\n)\r\n(?=\w)/

用空格代替它。

更新

小幅盤整,


$text ="This 
is 
a 
paragraph 

Second Paragraph"; 

$lb = "true"; 
if($lb=="true"){ 
      $text2 = preg_replace('/(?<!\r\n)\r\n(?=\w)/', ' ', trim($text)); 

     } 

echo $text2; 
+0

這似乎失敗:http://codepad.org/N2dZ1GSP – BandonRandon 2011-03-12 23:44:45

+0

更正,它現在必須工作。 – 2011-03-13 05:20:07

+0

它似乎在鍵盤上工作,但不是在我的實際軟件上是'htmlentities','stripslashes'或'nl2br'去做格式化和打破preg_replace? – BandonRandon 2011-03-13 06:19:17

1

你可以這樣寫

$text = preg_replace('@\n([a-z])@Us', ' \1', trim($text)); 
+0

這似乎這麼想的要解決的問題:http://codepad.org/3dGnuIQN – BandonRandon 2011-03-12 21:04:16

+0

對不起,解決這個問題 – azat 2011-03-12 21:44:23

+0

如果我不要誤認在文本前加了2個空格http://codepad.org/htGXDmuC – BandonRandon 2011-03-12 22:08:04