Karışık HTML ve kullanıcı girişi işlemek için en iyi yolu?

5 Cevap php

Ben yazıyorum bir PHP uygulamasında, ben kullanıcıların metin sivri-parantez ile HTML ve metin karışımını girmek istiyorum, ama bu metni görüntüler, ben HTML etiketleri olmayan HTML etiketleri tarafından verilen izin istiyorum edebi, örneğin gösterilir Bir kullanıcı girmek gerekir:

<b> 5 > 3 = true</b>

görüntülendiğinde, kullanıcı görmelisiniz:

5 > 3 = true

Bu ayrıştırmak için en iyi yolu nedir, yani onları > dönüştürmek, tüm non-HTML parantez bulmak ve <?

5 Cevap

Ben kullanıcıların daha sonra html etiketleri ile değiştirin BBcode tarzı biçimlendirme girmek zorunda tavsiye ederim:

[b]This is bold[/b]
[i]this is italic with a > 'greater than' sign there[/i]

Ben gereksiz bir yük gibi görünüyor itiraf olsa da bu, size html içine kullanıcının giriş ayrıştırmak nasıl üzerinde daha fazla kontrol sağlar.

Siz de HTML Purifier yararlanarak bakmak gerekir.

Eğer kullanıcı giriş HTML izin ediyorsanız, birkaç çıkmamış açılı parantez daha çok daha büyük bir sorunu çözmek için var; HTML doğrulamak ve düzgün filtre gerçekten zor, ve bunu yapmazsanız doğru XSS saldırılarına karşı kendinizi açın. Ben bunu yapan bir kütüphane yazdım; başkası zaten o yüzden yinelemek olmaz burada ona bir bağlantı yayınlanmıştır.

Ancak, kendi kaçtı formlarına başıboş açılı parantez dönüştürme en kusursuz şekilde DOM / libxml ile HTML ayrıştırma ve sonra reserializing edilir, sizin sorunuzu yanıtlamak için. Regexes ya da kenar-dava ile başarısızlığa mahkum olacaktır kullanan bir şey. Ayrıca kendi ayrıştırıcı yazabilirim ama bu da işin biraz alır.

Önce her şeyi kaçış ve ardından &lt;b&gt; ve &lt;/b&gt; ve Unescape sadece bu özel durumlarda aramak yerine HTML olmayan parantez bulma ve bunları kaçan: iyi yolu tersini yapmak olacaktır . Bu şekilde (yalnızca gerekli olan ne kaçmaya çalışırsanız, size önemli bir şey eksik risk) sayfanızda kötü niyetli HTML enjekte bir kullanıcıyı risk yok.

PEAR ve sizin için BBCode uygulamak PECL librarys vardır.