Gelen verileri kontrol etmek ve işlemek, programlamadaki ortak görevlerden biridir. PHP genellikle web uygulamaları için kullanılır, bu nedenle HTML etiketlerinin metinden kaldırılması burada en alakalı olanıdır çünkü bunlar üçüncü şahıs enjeksiyonlarına en duyarlıdır. Bu makalede, size eski stip_tags () ve püf noktalarını hatırlatmak, ayrıca bölümsel HTML etiketlerini kaldırmak için çözümler ve takip edilecek birkaç yararlı bonus sunmak istiyorum.
Yani. Metinden HTML etiketlerini kaldırmak için ana aracımız strip_tags () işlevidir. Ona veriyoruz dizi değer ve ondan HTML ve PHP etiketlerini kaldırır, örneğin:
$ s \u003d "
Paragraf.
Daha fazla metin. ";echo strip_tags ($ s);
Bu örnek şu satırı çıkaracaktır:
Paragraf. Daha fazla metin.
Burada dikkat çekicidir ki fonksiyonun bir de ikinci (isteğe bağlı ancak kullanışlı) değeri, izin verilen HTML etiketlerinin bir listesini içeren bir dize olan bir parametre, örneğin:
$ s \u003d "
Paragraf.
Daha fazla metin. ";echo strip_tags ($ s, "
Bu örnek şu satırı çıkaracaktır:
Paragraf.
Daha fazla metin.
Bence çok uygun. Ancak, bu önemli bir sorunu çözmez - kesitsel HTML etiketlerini kaldırmaörneğin komut dosyası, noscript ve stil en yaygın olanlardır. Bu tür bölüm etiketlerinin yanı sıra "ile başlayan seçenekleri kaldırmam gerektiğinde< » и заканчивающиеся символом « > ", Şu PHP kodunu kullanıyorum:
$ p \u003d dizi (
"""si",
"""si",
"""si",
""<[\/\!]*?[^<>] *?\u003e "si",
);
$ r \u003d array ("", "", "", "");
$ s \u003d preg_replace ($ p, $ r, $ s);
Burada, $ p değişkeni normal ifadelerden oluşan bir dizi içerir ve $ r, bunların karşılık gelen değiştirmelerinin bir dizisidir. (boşluk kullanırım)... Yapılması gereken tek şey satırı değiştirmektir ve HTML çöp kutusunu metinden kaldıracağız.
Açıkçası, yukarıdaki iki çözüm birleştirilebilir. Önce normal ifade değişimini kullanıyorum ve sonra strip_tags () ve kendi nohtml () fonksiyonum var.
Son olarak, size daha faydalı çözümler sunmak istiyorum. Bu nedenle, metinde tabloları bir boşlukla değiştirmek daha iyidir, her ikisinin de tarayıcıda yorumlanmasının sonucu aynıdır ve güçlük daha az olacaktır, örneğin:
$ s \u003d str_replace ("\\ t", "", $ s);
Satır sonlarına ihtiyacınız yoksa boşluklarla da değiştirilebilirler, örneğin:
$ s \u003d str_replace (dizi ("\\ n", "\\ r"), "", $ s);
Basit bir normal ifadeyle fazladan boşluklardan kurtulabilirsiniz, örneğin:
$ s \u003d preg_replace ("/ \\ s + /", "", $ s);
$ s \u003d trim ($ s); // gereksiz olmayacak
Hepsi benim için. İlginiz için teşekkür ederim. İyi şanslar!
zaman: 21:56 | Mesajı değiştir |
Kullanıcılardan aynı veri üzerinden veri aldığınızda, onlardan iletilen verileri işlemek ve çıktıda net metin almak mantıklıdır.
Bunun farklı şekillerde nasıl yapılabileceğini size şimdi anlatacağım.
PHP'deki bir dizeden tüm HTML etiketleri nasıl kaldırılır?
PHP'nin " strip_tags". Bir değişkendeki tüm HTML etiketlerini hızlı ve kolay bir şekilde kaldırmanıza olanak tanır.
Uygulama:
Selam Dünya!"; $ içerik \u003d strip_tags ($ içerik); echo $ içerik; //" Merhaba, dünya! "çıktı mı?\u003e
Selam Dünya!
"); echo $ content; //" Merhaba, dünya!
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vivamus sed lacus vel diam consectetur rhoncus et eget justo.
Bu durumda etiketleri kaydediyoruz
VE ... Bitiş etiketi olan etiketler için, kaydederken onu kaydetmeniz gerekmez.
Not, işlev HTML biçimlendirmesinin geçerliliğini kontrol etmez ve kapatılmamış etiketler varsa, normal metni kaybetme riskiniz vardır.
JavaScript'teki bir dizeden tüm HTML etiketleri nasıl kaldırılır?
JavaScript'te, alınan verileri daha sonra işleyeceğimiz kendi küçük işlevimizi yazacağız.
Uygulama:
Bu örnek, belirli bir değişken üzerinde çalışır, ancak onu, örneğin giriş alanından alınan içeriğe uyacak şekilde değiştirebilirsiniz.
Bir dizeden tüm veya yalnızca belirli html etiketlerini kaldırma görevi, genellikle herhangi bir sayfa ziyaretçisinin yeni bilgi eklemesi için bir fırsat sağlamak gerektiğinde ortaya çıkar. En yaygın örnek, bir ziyaretçi defteri veya site yorumlama sistemidir. Bu şekilde eklenen metin birçok farklı etiket içerebilir, metni kopyalarken yanlışlıkla eklenebilir veya mesajı bir şekilde "çok orijinal" yapmak için kasıtlı olarak eklenebilir. Ayrıca, betik etiketlerinde siteye kötü amaçlı kod enjekte etmeye yönelik kötü niyetli girişimleri veya sayfa düzenini gereksiz etiketlerle bozma girişimlerini de belirtmek gerekir.
Yukarıdaki durumların herhangi birinde, yeni bilgileri kaydetmeden önce onu gereksiz html etiketlerinden temizlemek gerekir.
Html etiketlerinden metnin tamamen temizlenmesi
Normal ifadeler genellikle bu tür görevler için kullanılır, ancak bu makalede en basit yönteme bakacağız - strip_tags php işlevini kullanarak etiketleri kaldıracağız. Bu işlev, etiketleri belirtilen dizeden kaldırır.
$ str_in \u003d " Benim metin itibaren çeşitli etiketleri.
$ str_out \u003d strip_tags ($ str_in);
echo $ str_out;
$ Str_out değişkeninde böyle bir işlemin bir sonucu olarak, etiketsiz bir dizge elde ederiz:
Metnim çeşitli etiketlerle.
* Strip_tags işlevinin, içeriklerini açılış ve kapanış etiketleri arasında bırakarak yalnızca etiketleri çıkardığını unutmayın.
Metinden tek tek html etiketlerini kaldırma
Bazen yalnızca belirli etiketleri bir dizeden çıkarmanız gerekir. Burada strip_tags fonksiyonunu da kullanacağız, ancak bu sefer ikinci (isteğe bağlı) parametre ile kaydedilmesi gereken etiketleri belirleyeceğiz.
Örneğin, bir dizeyi işlerken, yalnızca bağlantıları bırakmanız gerekir:
$ str_in \u003d " Benim metin itibaren çeşitli etiketleri.
$ str_out \u003d strip_tags ($ str_in, " "
);
echo $ str_out;
$ Str_out değişkenindeki bu işlemenin bir sonucu olarak şunu elde ederiz:
Metnim çeşitli etiketlerle.
Böylece, dizede geçerli olan tüm etiketleri belirtebilirsiniz, diğerlerinin tümü kaldırılacaktır.
Bu makalede, bir dizedeki etiketleri temizlemenin en kolay yolu anlatılmaktadır. Diğer seçenekleri değerlendirirken, bu makaleyi genişleteceğim. Bu sorunu çözmek için seçeneklerinizi yorumlarda veya e-posta ile önerirseniz sevinirim.
Kesinlikle herkes html'yi gereksiz etiketlerden temizleme göreviyle karşı karşıyadır.
Akla gelen ilk şey strip_tags () php işlevini kullanmaktır:
string strip_tags (string str [, string allowable_tags])
İşlev, etiketlerden arındırılmış bir dize döndürür. Kaldırılmaması gereken etiketler allowable_tags argümanı olarak iletilir. İşlev işe yarıyor, ancak yumuşak bir şekilde ifade etmek için mükemmel değil. Yol boyunca, etiketlerde bulunmayan metnin kaldırılmasını gerektirebilecek kodun geçerliliği için herhangi bir kontrol yoktur.
Proaktif geliştiriciler boşta oturmadılar - ağda geliştirilmiş işlevler bulunabilir. Strip_tags_smart buna iyi bir örnektir.
Hazır çözümleri kullanmak ya da kullanmamak, programcının kişisel tercihidir. Öyle oldu ki, çoğu zaman "evrensel" bir işleyiciye ihtiyacım yok ve kodu normal ifadelerle temizlemek daha uygun.
Şu veya bu işleme yönteminin seçimini ne belirler?
1. Kaynak malzemeden ve analizinin karmaşıklığından.
Oldukça basit htmp-metinlerini herhangi bir fantezi düzeni olmadan, gün kadar net bir şekilde işlemeniz gerekiyorsa :), o zaman standart işlevleri kullanabilirsiniz.
Metinlerin dikkate alınması gereken belirli özellikleri varsa, o zaman özel işleyicilerin yazıldığı yer burasıdır. Bazıları sadece str_replace kullanabilir. Örneğin:
$ s \u003d array ("â € ™" \u003d\u003e "’ ", // Sağ kesme işareti (örneğin, I" m içinde)
"â € œ" \u003d\u003e "" ", // Konuşma işaretini açma
"â €“ "\u003d\u003e" - ", // Uzun çizgi
"â €" \u003d\u003e "” ", // Kapanış konuşma işareti
"Ã" \u003d\u003e "é", // e akut vurgu
chr (226). chr (128). chr (153) \u003d\u003e "’ ", // Tekrar sağ kesme işareti
chr (226). chr (128). chr (147) \u003d\u003e "-", // Tekrar uzun tire
chr (226). chr (128). chr (156) \u003d\u003e "" ", // Konuşma işaretini açma
chr (226). chr (128). chr (148) \u003d\u003e "-", // M tire tekrar
chr (226). chr (128) \u003d\u003e "” ", // Sağ konuşma işareti
chr (195). chr (169) \u003d\u003e "é", // tekrar vurgulu
);
foreach ($ iğne olarak $ s \u003d\u003e $ değiştir)
{
$ htmlText \u003d str_replace ($ iğne, $ değiştir, $ htmlText);
}
Diğerleri dayanabilir düzenli ifadeler... Örnek olarak:
GetTextFromHTML ($ htmlText) işlevi
{
$ arama \u003d dizi ("""si", // javaScript'i kaldırın
"""si", // Stilleri kaldır
""
""<[\/\!]*?[^<>] *?\u003e "si", // HTML etiketlerini kaldırın
"" ([\\ r \\ n]) [\\ s] "", // Boşlukları kaldırın
"" & (quot | # 34); "i", // HTML özel karakterlerini değiştirin
"" & (amp | # 38); "i",
"" & (lt | # 60); "i",
"" & (gt | # 62); "i",
"" & (nbsp | # 160); "i",
"" & (iexcl | # 161); "i",
"" & (sent | # 162); "i",
"" & (pound | # 163); "i",
"" & (kopya | # 169); "i",
"" (\\ d); "e"); // php olarak yaz
$ değiştir \u003d dizi ("",
"",
"",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr (161),
chr (162),
chr (163),
chr (169),
"chr (\\\\ 1)");
Preg_replace döndür ($ arama, $ değiştirme, $ htmlText);
}
(Bu tür anlarda, preg_replace'in parametreler olarak dizilerle çalışma yeteneği her zamankinden daha fazla memnun. Gerekirse, diziyi normal dizilerinizle tamamlarsınız. Örneğin, bu regex yapıcısı onları derlemenize yardımcı olabilir. Acemi geliştiriciler, "HTML etiketleri hakkında her şey. HTML etiketlerini çıkarmak için 9 Normal İfade" başlıklı makaleyi yararlı bulabilir. Oradaki örneklere bakın, mantığı analiz edin.
2. Ciltlerden.
Hacimler doğrudan analizin karmaşıklığı ile ilgilidir (önceki paragraftan). Çok sayıda metin, her şeyi önceden görmeye ve düzenli olarak temizlemeye çalışarak bir şeyleri kaçırma olasılığınızı artırır. Bu durumda, "çok aşamalı" temizleme yöntemi uygundur. Yani, önce strip_tags_smart işlevini kullanarak temizleyin (her ihtimale karşı kaynakları silmiyoruz). Daha sonra "anormallikleri" belirlemek için seçmeli olarak bir dizi metni tararız. Normal hatlarla anormallikleri "temizliyoruz".
3. Sonuç olarak elde edilmesi gerekenden.
İşleme algoritması, duruma bağlı olarak farklı şekillerde basitleştirilebilir. Önceki makalelerden birinde anlattığım vaka bunu çok iyi gösteriyor. Metnin bir div içinde olduğunu hatırlatmama izin verin, buna ek olarak "ekmek kırıntıları" olan bir div, bir adsense reklamı, benzer makalelerin bir listesi. Bir makale örneklemini incelerken, makalelerin şekil içermediği ve basitçe paragraflara bölündüğü görülmüştür. "Ana" div'i gereksiz şeylerden temizlememek için, tüm paragrafları bulabilir (Basit HTML DOM Ayrıştırıcı ile çok basittir) ve içeriklerini birleştirebilirsiniz. Bu yüzden düzenli temizlik yapmadan önce, biraz kanla idare edip edemeyeceğine bir bak.
Genel olarak, html kodunu tamamen normal ifadelere dayanan ayrıştırma ve belgenin DOM yapısının analizine dayanan ayrıştırma destekçileri arasında gerçek holivarlar web'de parlar. Örneğin, taşma. İlk bakışta masum
Tarayıcınızda JavaScript engellendi. Lütfen sitenin çalışması için JavaScript'i etkinleştirin!
strip_tags
(PHP 3\u003e \u003d 3.0.8, PHP 4, PHP 5)
strip_tags - HTML ve PHP etiketlerini dizeden kaldırırAçıklama
dizi strip_tags (string str [, string allowable_tags])Bu işlev, HTML ve PHP etiketlerinin kaldırıldığı dizeyi döndürür. Etiketleri kaldırmak için, işlevde kullanılana benzer bir otomat kullanılır. fgetss () .
İsteğe bağlı ikinci bağımsız değişken, kaldırılmaması gereken etiketleri belirtmek için kullanılabilir.
DikkatYorum Yap: Allowable_tags argümanı PHP 3.0.13 ve PHP 4.0b3'te eklenmiştir. PHP 4.3.0'dan beri, HTML yorumları da kaldırılmıştır.
Çünkü strip_tags () HTML kodunun doğruluğunu kontrol etmez, eksik etiketler, etiketlerde bulunmayan metnin kaldırılmasına neden olabilir.
Örnek 1. Kullanım örneği strip_tags ()
$ text \u003d "Paragraf.
Biraz daha text "; echo strip_tags ($ text); echo" \\ n \\ n ------- \\ n "; // kaldırmayınYankı strip_tags ($ metin, "
"); // İzin vermek ,, echo strip_tags ($ metin, " ");
Bu örnek çıktı:
Paragraf. Biraz daha metin -------
Paragraf.
Biraz daha metin
DikkatBu işlev, style ve onmouseover dahil allowable_tags bağımsız değişkeninde belirtilen etiketlerin özniteliklerini değiştirmez.
PHP 5.0.0'dan beri strip_tags () verileri ikili biçimde işlemek için güvenlidir.
Bu işlevin önemli bir dezavantajı vardır - etiketleri kaldırırken kelimeleri yapıştırmaktır. Ek olarak, işlevin güvenlik açıkları vardır. Strip_tags'e benzer alternatif bir işlev:
c "* -" kirli "html, etiket özellik değerlerinde karakterler bulunduğunda doğru şekilde işlenir< > * - bozuk html doğru şekilde işlenir * - yorumlar, komut dosyaları, stiller, PHP, Perl, ASP kodu, MS Word etiketleri, CDATA kesilir * - metin html kodu içeriyorsa otomatik olarak biçimlendirilir * - aşağıdaki gibi sahteciliklere karşı koruma "<
Ayrıca fonksiyon açıklamasına bakın
İPhone'da Viber'i Rusça olarak indirin Viber, iPhone 4'te indirilemez
Dizüstü bilgisayar ekranı ters çevrildi - nasıl düzeltilir?
Acrobat Reader: güncelleme veya güncelleme yapmayı reddetme Adobe Reader neden güncellenmiyor
Virüs koruması. Hangi antivirüs daha iyidir? AVIRA: evrensel koruma formatı
Topface - uluslararası sosyal flört servisi Topface sayfama giriş maple leaf