HTML kodlanmış etiketlerini kaldırmak için normal bir ifade ya da işlev ile yardımcı olabilir misiniz?

6 Cevap php

Ben veritabanı kaydındaki olarak kodlanmış HTML etiketlerini kaldırabilirsiniz bir regex ya da işlev gerekir. Ben kodlanmış HTML olarak (TinyMCE itibaren) depolanan bir veritabanında metin var.

Kodu "dan daha az" vardır; ve 'daha büyük'; etiketleri kodlanmış.

Ben tüm kodlanmış etiketlerini ve HTML kaldırmak ve sadece düz metin ve yalnızca boşluk bırakmak istiyorum.

6 Cevap

Ben bir kullanıcı size yutturmak olabilecek ve tüm HTML anlatabileceğiniz bir şey ile geliyor gibi sürekli meşgul bir tam-zamanlı çalışan tutmak bir iştir, burada belgeli eski önlemek istiyorum.

Bunun yerine, zaten mevcut PHP işlevselliği dayanan bir iki durak yaklaşım daha iyi bir seçimdir.

İlk olarak, daha büyük ve htmlspecialchars_decode ile işaretleri daha az geri kodlanmış HTML varlıkları dönelim.

$string = htmlspecialchars_decode($string);

Bu bize uygun html bir dize vermelidir. (Senin tırnak hala kodlanmış ise, bağlantılı belgelerinde ikinci argüman bakınız).

Bitirmek için, biz PHP fonksiyon strip_tags ile HTML etiketleri dışında şerit olacak. Bu kaynaktan her türlü HTML etiketlerini kaldırmak olacaktır.

$string = strip_tags($string);

Bir işlev / yöntem Sarılmış

function decodeAndStripHTML($string){
    return strip_tags(htmlspecialchars_decode($string));
}

Eğer &lt; < ve &gt; > çevirmek ve daha sonra (metin ayıklamak için bir HTML ayrıştırıcı kullanmak gerekir gibi geliyor ikincisi /) düzenli ifadeler ile yapılmamalıdır olamaz.

Ayrıca HTML Purifier olarak adlandırılan bu kütüphane tarafından ilginizi çekebilir.

Derler ki, ve ben alıntı:

HTML Purifier is a standards-compliant HTML filter library written in PHP. HTML Purifier will not only remove all malicious code (better known as XSS) with a thoroughly audited, secure yet permissive whitelist, it will also make sure your documents are standards compliant, something only achievable with a comprehensive knowledge of W3C's specifications. Tired of using BBCode due to the current landscape of deficient or insecure HTML filters? Have a WYSIWYG editor but never been able to use it? Looking for high-quality, standards-compliant, open-source components for that application you're building? HTML Purifier is for you!

Remove HTML regex

Alan Fırtına yanıt olarak: Ben ne yazık olduğunu JavaScript doğrulama kullanılan bir web uygulaması için tam zamanlı çalışan (haha).

İşte ben yazdım JavaScript regex olduğunu. Ben o kadar temizlenmiş olabilir eminim:

var regex =

/ (& # [0-9] ;)|(&[A-Za-z0-9] ;) | (<[/] [A-Za-z0-9 = /:;?.!, @ # $% ^ & * "'| _ {} \ ~` () + -] + [/]>) / g?;

Nerede [d veya $ amp; veya veya] veya açılı parantez içinde bir şey, bir maç oldu vurgulanmış, ve sonunda kullanıcı için kaldırılmıştır.

-Yan Not: Ben kullanıcı için düşünme inanmıyorum, ama bu regex gerekli oldu.

&lt;.*?&gt;

Ben genellikle tüm html etiketlerini maç için bu \s*?<.*?>\s*? kullanın. Eğer kullanabilirsiniz kişilere kodlanmış etiketlerini kaldırmak için \s*?&lt;.*?&gt;\s*?

\ S, beyaz boşluk eşleşir. (Nokta), * önceki karakterin sıfır veya daha fazla ocurrences demektir, herhangi bir karakterle eşleşir? * (ungreedy) * tembel yapar ile birlikte.

Kullandığınız diline bağlı olarak, çalışmak için ifade için ekstra backslash'lar eklemek gerekebilir. Yanılmıyorsam eğer, PHP bu \\s*?<.*?>\\s*? gibi ikinci bir ters eğik çizgi, ihtiyacı

Metin html etiketleri, (örneğin bir matematik denklemi) değil büyük ve daha az karakter içeriyorsa Ancak, sorunlar çalışacaktır. Bu durumda, daha sofistike ve daha az basit regex gerekir.