我需要将标签内的空格替换为其他符号。例如:
<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代码吗?答案 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);