在PREG_REPLACE之后,PHP中的文本换行噩梦

时间:2011-05-05 01:44:49

标签: php word-wrap

省份是包含省份的所有个别记录的group_concat,其中一些是空白的。 所以,当我编码:

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

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

这就是结果:

  

Minas Gerais ,,, Rio Grande do

     

Sul,Santa Catarina,Paraná,SãoPaulo

但是,当我尝试preg_replace掉一些空值时,用这个表达式添加一些空格:

  

$ provinces = preg_replace($ patterns,   $ replaceces,($ row ['provinces']));

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

这就是我得到的! :(

  

米纳斯吉拉斯州,Rio Grande do

     

Sul,Santa

     

Catarina,Paraná,SãoPaulo

输出非常不自然。

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;';

更新:我甚至试图将巴拉那改为巴拉那

  

米纳斯吉拉斯州,Rio Grande do

     

Sul,Santa

     

Catarina,Parana,São

     

圣保罗

2 个答案:

答案 0 :(得分:1)

请勿使用&nbsp;作为替代品。 wordwrap()认为有6个字符。它不解释HTML实体。这就是为什么你的线条很有趣。如果您希望在&nbsp;

wordwrap()替换空格

此外,您的第一个模式应该是:

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

答案 1 :(得分:0)

wordwrap()真的有必要吗?听起来您将此内容呈现为某个固定宽度的表格单元格,并且您不希望单个条目跨行分割。

如果这个推断是正确的 - 并且如果你的条目实际上都没那么长,以至于强制它到一行会破坏你的布局 - 那么如何:逗号到数组中的explode(),删除空格-only条目,将每个数组条目中的正常空格替换为&nbsp;,将implode()替换为,(逗号后跟空格)。然后让渲染浏览器在任何需要的地方打破行。