PHP preg_replace:如何替换html标签内的空格

时间:2016-05-23 10:08:57

标签: php regex preg-replace

我需要将标签内的空格替换为其他符号。例如:

<p class="hero big" style="color: inherit; border: none">Super big hero <br />example Yeah</p>

<p~class="hero~big"~style="color:~inherit;~border:~none">Super big hero <br~/>example Yeah</p>

我是regexp的新手,不知道从哪开始。我能够在任何地方替换空格,但不能替换标签内部。

何你这样做?你能提供工作的PHP代码吗?

4 个答案:

答案 0 :(得分:0)

试试这个,它会用〜

替换标签内的空格
<?php
  $data = '<p class="hero big" style="color: inherit; border: none">Super big hero <br />example Yeah</p>';
  $replace = preg_replace('/(<[^>]*)\s+([^<]*>)/', '$1~$2', $data);
  echo $replace;
?>

答案 1 :(得分:0)

试试这个

$text = htmlspecialchars('<p class="hero big" style="color: inherit; border: none">Text <br />Text</p>', ENT_QUOTES);

$text = preg_replace('/\s+/', '~', $text);

echo $text;

注意: - 分别处理html标签和主要文本

答案 2 :(得分:0)

感谢PHP preg_replace: how to replace text between tags?,这是一个解决方案:

<?php
$s = '<p class="hero big" style="color: inherit; border: none">Super big hero <br />example Yeah</p>';
$text = preg_replace_callback('#(<)([^>]+)(>)#', function($matches){
    return $matches[1].str_replace(" ", "~", $matches[2]).$matches[3];
}, $s);
?>

答案 3 :(得分:0)

您可以使用(*SKIP)(*F)跳过外部标记,如下所示:

$str = preg_replace('~>[^<]*(*SKIP)(*F)|\s+~','~', $str);

See demo at eval.in