Как заменить все пробелы внутри HTML-элементов с помощью preg replace?
Мне нужно заменить пробелы на
внутри 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>
3 ответа:
Используйте регулярное выражение для перехвата данных между тегами
(?:<\/?\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, create_function('$matches','return $matches[1].str_replace(" "," ",$matches[2]);'), $data); $data = preg_replace_callback($ex1, create_function('$matches','return str_replace(" "," ",$matches[1]).$matches[2];'), $data); $data = preg_replace_callback($ex2, create_function('$matches','return $matches[1].str_replace(" "," ",$matches[2]);'), $data); echo $data; ?>
Это работает... немного изменено, но это будет работать без изменений (но я не думаю, что вы понимаете код ;))
Поскольку маркировка HTML регулярными выражениями может быть довольно сложной (особенно при разрешении SGML-причуд), вы должны использовать синтаксический анализатор HTML DOM, подобный тому, который используется в библиотеке DOM PHP. Затем вы можете запросить 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
функция - это пользовательская функция, которую я определил в Как заменить текстовые URL-адреса и исключить URL-адреса в HTML-тегах?