用HTML标记替换多个''

时间:2016-07-04 09:53:49

标签: php regex simple-html-dom

今天处理一个奇怪的问题 - 客户端会将大量文本粘贴到HTML编辑器中,这会添加许多不间断的空格。输出到浏览器时我需要设置样式。

我正在尝试制作以下字符串

<ul class="columns">
    <li><u>Running costs</u></li>
    <li>Urban mpg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50.4 mpg</li>
    <li>Extra Urban mpg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72.4 mpg</li>
</ul>

更改为:

<ul class="columns">
    <li><u>Running costs</u></li>
    <li>Urban mpg<span class="right">50.4 mpg</span></li>
    <li>Extra Urban mpg<span class="right">72.4 mpg</span></li>
</ul>

使用preg替换或HTML解析器。我试过了两个。我的PHP preg_replace是这样的:

preg_replace("/(&nbsp;)/", "<span>", $input_lines);

用...替换所有&amp; nspb;的。我只希望添加一个跨度,我也需要它在最后关闭。我一直在使用Simple HTML Dom,但不确定使用哪些函数来实现这一目标。

由于

4 个答案:

答案 0 :(得分:3)

你可以尝试

(?:&nbsp;)+([^<]*)

替换为

<span class="right">\1</span>

它匹配所有重复的&nbsp;,然后将所有内容抓取到结束标记的<。用上面的字符串替换它会将捕获与周围的span一起插入。

See it here at regex101

答案 1 :(得分:0)

你可以使用css选择器,你需要转义的unicode值。

span.right::before {
    content: "\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0";
}

答案 2 :(得分:0)

这应该有用。

<?php
$text = '<ul class="columns">
    <li><u>Running costs</u></li>
    <li>Urban mpg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50.4 mpg</li>
    <li>Extra Urban mpg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72.4 mpg</li>
</ul>';

$new_text = preg_replace("/(?:&nbsp;)+([^<]*)/", " <span class=\"right\">\${1}</span>", $text);
echo $new_text;

结果:https://eval.in/600085

答案 3 :(得分:0)

试试这个

<?php
$text = "<ul class='columns'>
<li><u>Running costs</u></li>
<li>Urban mpg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50.4 mpg</li>
<li>Extra Urban mpg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72.4 mpg</li>
</ul>";    
echo $text;
$pattern = '/(&nbsp;)+([\w\.\s]+)(<\/li>)/'; 
$text = preg_replace($pattern,'<span class="name">$2</span>', $text);

echo htmlspecialchars($text);
?>