2011-05-05 47 views
0

PHP中的文字環繞噩夢省份是包含省份的所有單個記錄的group_concat,其中一些記錄爲空白。 所以,當我編碼:PREG_REPLACE

$provinces = ($row['provinces']); 

echo "<td>".wordwrap($provinces, 35, "<br />")."</td>"; 

這是結果是什麼樣子:

米納斯吉拉斯州,,,南里奧格蘭

扎,聖卡塔琳娜州,巴拉那州,聖保羅

但是,當我嘗試preg_re放置出一些空值,以及與此表達增加一些空格:

$省= preg_replace函數($圖案, $取代,($行[ '省']));

echo "<td>".wordwrap($provinces, 35, "<br />")."</td>";` 

這是我得到的! :(

米納斯吉拉斯州,南里奧格蘭

Sul的聖誕老人

聖卡塔琳娜,巴拉那州,聖保羅

輸出非常不自然的觀看

BTW:以下是搜索和替換陣列:

$patterns[0] = '/,,([,]+)?/';  $replaces[0] = ',&nbsp;'; 
$patterns[1] = '/^,/';    $replaces[1] = ''; 
$patterns[2] = '/,$/';    $replaces[2] = ''; 
$patterns[3] = '/\b,\b/';   $replaces[3] = ',&nbsp;'; 
$patterns[4] = '/\s,/';    $replaces[4] = ',&nbsp;'; 

UPDATE:我甚至試圖巴拉那州更改爲巴拉那

米納斯吉拉斯州,南里奧格蘭

Sul的聖誕老人

聖卡塔琳娜,巴拉那州,聖保羅

聖保羅

+0

那你到底在問什麼?您在替換時是否使用' '而不僅僅是一個常規空間? – RDL 2011-05-05 02:03:46

回答

1

請勿使用&nbsp;作爲替換。 wordwrap()認爲這6個字符。它不解釋HTML實體。這就是爲什麼你的線路破壞有趣。如果你想&nbsp;後您wordwrap()

而且更換空間,您的第一個模式應該是:

// match one or more commas together 
$patterns[0] = '/,+/'; 
+1

其實 是六個字符。 – webbiedave 2011-05-05 02:05:25

+2

@webbiedave,你比我更重要;) – 2011-05-05 02:08:13

+0

哇,你是先生,是個天才! – 2011-05-05 02:08:31

0

是在wordwrap()真的有必要嗎?這聽起來像是你將這個內容渲染到一個固定寬度的表格單元格中,並且你不希望單個條目跨行分割。

如果這個推論是正確的 - 而且如果你的條目都不是真的那麼長,強制它到一行就會破壞你的佈局 - 那麼如何將這個:explode()逗號放入數組中,刪除只有空白的條目,將&nbsp;implode()替換爲,(逗號後跟空格)的每個數組項中的普通空格。然後讓渲染瀏覽器在需要的地方斷線。