用 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; 替换为 .我只想添加一个跨度,我也需要在最后关闭它。我一直在尝试使用 Simple HTML Dom 但不确定要使用什么函数才能最好地实现这一点。

谢谢

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

span.right::before {
    content: "[=10=]a0[=10=]a0[=10=]a0[=10=]a0[=10=]a0[=10=]a0[=10=]a0[=10=]a0[=10=]a0[=10=]a0";
}

你可以试试

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

替换为

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

它匹配所有重复的 &nbsp;,然后抓取结束标记 < 之前的所有内容。用上面的字符串替换它会插入带有周围 span.

的捕获

See it here at regex101.

这应该有效。

<?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"></span>', $text);

echo htmlspecialchars($text);
?>