替换多个'  & #39;HTML标签


Replace multiple '   ' with HTML tag

今天在做一个奇怪的事情-一个客户端将在一个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);

将所有&nspb;替换为。我只希望一个跨度被添加,我需要它在结束时关闭了。我一直在尝试简单的HTML Dom,但不确定使用什么函数来最好地实现这一点。

谢谢

你可以试试

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

替换为

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

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

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

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

应该可以。

<?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

试试这个

<?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);
?>