Dizeden yararsız paragraf etiketlerini çıkarmak

3 Cevap php

: Ben bir dize gibi varsa

<p>&nbsp;</p>
<p></p>
<p class="a"><br /></p>
<p class="b">&nbsp;</p>
<p>blah blah blah this is some real content</p>
<p>&nbsp;</p>
<p></p>
<p class="a"><br /></p>

Nasıl sadece içine açabilirsiniz:

<p>blah blah blah this is some real content</p>

Regex &nbsp; s ve boşluk almak gerekiyor.

3 Cevap

$result = preg_replace('#<p[^>]*>(\s|&nbsp;?)*</p>#', '', $input);

Bu çıkış değişmez nbsp karakterleri yakalamak değil, görmek çok nadirdir.

HTML ile uğraşıyoruz yana bu kullanıcı girişi ise, ben de XSS açıkları ile ilgileneceğiz HTML Arıtma kullanarak önerebiliriz. Eğer boş p etiketlerini kaldırmak için orada istediğiniz ayarı yapılandırması% AutoFormat.RemoveEmpty olduğunu.

Bu regex sizin örnekte karşı çalışır:

<p[^>]*>(?:\s+|(?:&nbsp;)+|(?:<br\s*/?>)+)*</p>

Orijinal replier belirtildiği gibi, regex ne istediğinizi html striptizci çeşit, burada en iyi çözüm değildir.

A function on this site: http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page

Size yardımcı olmalıdır, sadece yeni hatları ve geri istediğiniz biçime ne değildir almak için dize manipülasyon biraz kullanmak gerekir.