如何用 替换HTML元素中的所有空格 使用preg_replace?

Pro*_*o85 6 html php spaces preg-replace

我需要用 内部HTML元素替换空格.例:

<table atrr="zxzx"><tr>
<td>adfa a   adfadfaf></td><td><br /> dfa  dfa</td>
</tr></table>
Run Code Online (Sandbox Code Playgroud)

应该成为

<table atrr="zxzx"><tr>
<td>adfa&nbsp;a&nbsp;&nbsp;&nbsp;adfadfaf></td><td><br />&nbsp;dfa&nbsp;&nbsp;dfa</td>
</tr></table>
Run Code Online (Sandbox Code Playgroud)

krt*_*tek 8

如果你正在使用php,你可以这样做

$content = str_replace(' ', '&nbsp;', $content);
Run Code Online (Sandbox Code Playgroud)

  • 此代码也替换了html标记内的空格. (2认同)
  • html 标签属性中的所有空格也将被替换 (2认同)

n00*_*00b 4

使用正则表达式捕获标签之间的数据

(?:<\/?\w+)(?:\s+\w+(?:\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+)?)+\s*|\s*)\/?>([^<]*)?
Run Code Online (Sandbox Code Playgroud)

然后替换' ''&nbsp;'

还可以捕获 html 之前和之后:

^([^<>]*)<?

>([^<>]*)$
Run Code Online (Sandbox Code Playgroud)

编辑:给你......

<?php
$data="dasdad asd a  <table atrr=\"zxzx\"><tr><td>adfa a   adfadfaf></td><td><br /> dfa  dfa</td></tr></table>  asdasd s ";
$exp="/((?:<\\/?\\w+)(?:\\s+\\w+(?:\\s*=\\s*(?:\\\".*?\\\"|'.*?'|[^'\\\">\\s]+)?)+\\s*|\\s*)\\/?>)([^<]*)?/";

$ex1="/^([^<>]*)(<?)/i";
$ex2="/(>)([^<>]*)$/i";

$data = preg_replace_callback($exp, function ($matches) {
    return $matches[1] . str_replace(" ", "&nbsp;", $matches[2]);
}, $data);
$data = preg_replace_callback($ex1, function ($matches) {
    return str_replace(" ", "&nbsp;", $matches[1]) . $matches[2];
}, $data);
$data = preg_replace_callback($ex2, function ($matches) {
    return $matches[1] . str_replace(" ", "&nbsp;", $matches[2]);
}, $data);

echo $data;
?>
Run Code Online (Sandbox Code Playgroud)

它可以工作......稍微修改一下,但无需修改即可工作(但我认为你不会理解代码;))