разделите все классы от тегов p

Мне нравится этот: http://xkcd.com/149/

alt text

(Надлежащая Пользовательская политика, по-видимому, означает Simon Says.)

6
задан SoulieBaby 23 July 2009 в 10:35
поделиться

5 ответов

Довольно наивное регулярное выражение, вероятно, сработает для вас

$html=preg_replace('/class=".*?"/', '', $html);

Я говорю наивным, потому что оно не сработает, если ваш основной текст по какой-то причине будет содержать class = "something" !. Его можно было бы сделать немного более надежным, если нужно будет искать class = "" внутри тегов, заключенных в угловые скобки.

8
ответ дан 8 December 2019 в 14:45
поделиться

Возможно, это немного излишне для ваших нужд, но для анализа / проверки / очистки данных HTML лучший инструмент, который я знаю, - это Очиститель HTML

. Он позволяет вам определять, какой теги и атрибуты допустимы; и / или какие нет; и он выдает действительный / чистый (X) HTML в качестве вывода.

(Использование регулярных выражений для «синтаксического анализа» HTML кажется нормальным вначале ... А затем, когда вы хотите добавить конкретный материал, обычно становится адом понимать / поддерживать)

2
ответ дан 8 December 2019 в 14:45
поделиться

Вы загружаете HTML в класс DOMDocument, загружаете его в simpleXML. Затем вы выполняете запрос XPath для всех элементов p и затем просматриваете их. В каждом цикле вы переименовываете атрибут класса во что-то вроде «killmeplease».

Когда это будет сделано, повторно выведите simpleXML как XML (который, кстати, может изменить HTML, но обычно только в лучшую сторону), и вы получите строку HTML, в которой каждый p имеет класс «killmeplease». Используйте str_replace, чтобы удалить их.

Пример:

$html_file = "somehtmlfile.html";

$dom = new DOMDocument();
$dom->loadHTMLFile($html_file);

$xml = simplexml_import_dom($dom);

$paragraphs = $xml->xpath("//p");

foreach($paragraphs as $paragraph) {
     $paragraph['class'] = "killmeplease";
 }

 $new_html = $xml->asXML();

 $better_html = str_replace('class="killmeplease"', "", $new_html);

Или, если вы хотите сделать код более простым, но запутать preg_replace, вы можете пойти с:

$html_file = "somehtmlfile.html";
$html_string = file_get_contents($html_file);

$bad_p_class = "/(<p ).*(class=.*)(\s.*>)/";

$better_html = preg_replace($bad_p_class, '$1 $3', $html_string);

Сложность с регулярными выражениями заключается в том, что они обычно жадный и попытка выключить это может вызвать проблемы, если в вашем теге элемента p есть разрыв строки. Но дайте шанс любому из них.

2
ответ дан 8 December 2019 в 14:45
поделиться

Я бы сделал что-то подобное на jQuery. Поместите это в заголовок своей страницы:

$(document).ready(function(){
$(p).each(function(){
     $(this).removeAttr("class");
     //or  $(this).removeclass("className");
})

});

1
ответ дан 8 December 2019 в 14:45
поделиться

HTML Purifier

HTML can be very tricky to regex because of the hundreds of different ways code can be written or formatted.

The HTML purifier is a mature open source library for cleaning up HTML. I would advise its usage in this case.

In HTML purifier's configuration documentation, you can specify classes and attributes which should be allowed and what the purifier should do if it finds them.

http://htmlpurifier.org/docs/

1
ответ дан 8 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: