2015-08-17 25 views
5

Tüm içeriği (etiketler arasında) bir HTML dizesinden kaldırmak istiyorum. Karmaşık ifadeler yazmadan bunu yapmak için şık bir yol var mı?PHP'deki HTML etiketleri arasındaki içeriği kaldırın?

İsterseniz, strip_tags()'un ne yaptığı'un tam karşısında 'u arıyorum.

Öneriler?

+1

Bir DOM ayrıştırıcısı kullanın. – David

+0

Veya bu https://code.google.com/p/phpquery/ adresini deneyin. –

cevap

7

Bu çözüm, regex kullanır. Karmaşık olup olmadığına karar vermene izin vereceğim.

$out = preg_replace("/(?<=^|>).*?(?=<|$)/s", "", $in); 

en yıkmak edelim:

  • (?<=^|>): Bir olan ileriye dönük. Aslında eşleşmedi, ama hala orada olmalı. Dize başlangıcı (^) veya hazır > ile eşleşir.
  • .*?: Her şeyle eşleşir (s değiştirici, yeni satır eklemeyi sağlar). Soru işareti onu tembelleştirir - mümkün olduğunca az karakterle eşleşir.
  • :
  • (?=<|$): Bir bakış. Ya literal < veya dize sonu ($) ile eşleşir. > ve < arasındaki her şeyin silinmesi için

Bu, hiçbir şey ("") ile değiştirilir. Çalışan bir demo here görülebilir. Beyaz boşlukları korumaz, böylece bir süper uzun çizgi ile sonuçlanırsınız.

DÜZENLEME:

: Eğer giriş her zaman HTML etiketleri sarılmış olacağını biliyorsanız dize bit başında ve sonunda düşünmek zorunda olmadığı sen kendin için bile basit yapabilirsiniz
$out = preg_replace("/>.*?</s", "><", $in); 

Bu varyant başlangıçta veya sonunda metinle giriş için çalışmayacaktır - örneğin , Hello<b></b>! haline gelir.

İlgili konular