Intereting Posts
Динамические маршруты Codeigniter Проверьте, является ли строка адресом электронной почты в PHP Изображение обрезки PHP для исправления ширины и высоты без потери соотношения размеров Найти все hrefs на странице и заменить ссылку, поддерживающую предыдущую ссылку – PHP Задержка профилирования PHP перед отключением Динамический белый список с htaccess, позволяющий форме добавить IP-адрес в белый список? Как разрабатывать, подделывая логин для тестирования ACL в Symfony 2 PHP: Определить функцию с переменным числом параметров? Декодирование JSON после отправки с использованием PHP cUrl Нужна помощь в создании запроса на основе значений фильтра ui Как заменить каждый второй пробел? Синхронизация строк в PHP datetime Gmail с 3-сторонним доступом OAuth – Zend_Mail_Protocol_Exception PHP json_decode возвращает пустой массив Оберните все изображения с помощью div с помощью DOMDocument

Как заменить все пробелы внутри элементов HTML на & nbsp; используя 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&nbsp;a&nbsp;&nbsp;&nbsp;adfadfaf></td><td><br />&nbsp;dfa&nbsp;&nbsp;dfa</td> </tr></table> 

    использовать регулярное выражение для сбора данных между тегами

     (?:<\/?\w+)(?:\s+\w+(?:\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+)?)+\s*|\s*)\/?>([^<]*)? 

    затем замените ' ' на '&nbsp;'

    также ловить до и после 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(" ","&nbsp;",$matches[2]);'), $data); $data = preg_replace_callback($ex1, create_function('$matches','return str_replace(" ","&nbsp;",$matches[1]).$matches[2];'), $data); $data = preg_replace_callback($ex2, create_function('$matches','return $matches[1].str_replace(" ","&nbsp;",$matches[2]);'), $data); echo $data; ?> 

    он работает … слегка изменен, но он будет работать без изменений (но я не думаю, что вы понимаете код;))

    Если вы работаете с php, вы можете сделать

     $content = str_replace(' ', '&nbsp;', $content); 

    Поскольку токенизация 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(' ', '&nbsp;', $node->nodeValue); }); 

    Функция mapOntoTextNodes – это настраиваемая функция, которую я определил в mapOntoTextNodes Как заменить текстовые URL-адреса и исключить URL-адреса в тегах HTML?