I need replace spaces with
inside HTML elements.
Example:
<table atrr="zxzx"><tr>
<td>adfa a adfadfaf></td><td><br /> dfa dfa</td>
</tr></table>
should become
&开发者_JAVA技巧lt;table atrr="zxzx"><tr>
<td>adfa a adfadfaf></td><td><br /> dfa dfa</td>
</tr></table>
If you're working with php, you can do
$content = str_replace(' ', ' ', $content);
use regex to catch data between tags
(?:<\/?\w+)(?:\s+\w+(?:\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+)?)+\s*|\s*)\/?>([^<]*)?
then replace ' '
with ' '
also to catch before and after html :
^([^<>]*)<?
>([^<>]*)$
Edit: here you go....
<?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;
?>
it works... slightly modified but it would work without modifications (but i dont think youd understand the code ;) )
Since tokenizing HTML with regular expressions can be quite complicated (especially when allowing SGML quirks), you should use an HTML DOM parser like the one of PHP’s DOM library. Then you can query the DOM, get all text nodes and apply your replacement function on it:
$doc = new DOMDocument();
$doc->loadHTML($str);
$body = $doc->getElementsByTagName('body')->item(0);
mapOntoTextNodes($body, function(DOMText $node) { $node->nodeValue = str_replace(' ', ' ', $node->nodeValue); });
The mapOntoTextNodes
function is a custom function I had defined in How to replace text URLs and exclude URLs in HTML tags?
精彩评论