我需要在HTML元素中用
替换空格。
例如:
<table atrr="zxzx"><tr>
<td>adfa a adfadfaf></td><td><br /> dfa dfa</td>
</tr></table>
应该成为
<table atrr="zxzx"><tr>
<td>adfa a adfadfaf></td><td><br /> dfa dfa</td>
</tr></table>
答案 0 :(得分:7)
如果你正在使用php,你可以
$content = str_replace(' ', ' ', $content);
答案 1 :(得分:4)
使用正则表达式来捕获标记之间的数据
(?:<\/?\w+)(?:\s+\w+(?:\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+)?)+\s*|\s*)\/?>([^<]*)?
然后将' '
替换为' '
也要在html之前和之后捕捉:
^([^<>]*)<?
>([^<>]*)$
编辑: 你去吧....
<?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(" ", " ", $matches[2]);
}, $data);
$data = preg_replace_callback($ex1, function ($matches) {
return str_replace(" ", " ", $matches[1]) . $matches[2];
}, $data);
$data = preg_replace_callback($ex2, function ($matches) {
return $matches[1] . str_replace(" ", " ", $matches[2]);
}, $data);
echo $data;
?>
它的工作原理......略有修改,但它可以不经修改而工作(但我不认为你理解代码;)
答案 2 :(得分:3)
由于使用正则表达式对HTML进行标记可能非常复杂(特别是在允许SGML怪癖时),您应该使用像PHP’s DOM library那样的HTML DOM解析器。然后,您可以查询DOM,获取所有文本节点并在其上应用替换函数:
$doc = new DOMDocument();
$doc->loadHTML($str);
$body = $doc->getElementsByTagName('body')->item(0);
mapOntoTextNodes($body, function(DOMText $node) { $node->nodeValue = str_replace(' ', ' ', $node->nodeValue); });
mapOntoTextNodes
function是我在How to replace text URLs and exclude URLs in HTML tags?