Keraksiz HTML TUGS-dan matnni tozalash - A dan Z. gacha bo'lgan HTML qator teglaridan xalos bo'lish PHP PHP-dan o'chirish HTML yorliqlarini chiziqdan olib tashlang
HTMLni keraksiz teglardan tozalash vazifasi bilan, mutlaqo hamma narsa yuz bermoqda.
Aqlga chiqqan birinchi narsa bu PHP-funktsiyasini () quyidagilarni ishlatishdir:
Stream Strip_tags (tor str rowacagle_tags])
Funktsiya teglardan tozalangan satrni qaytaradi. O'chirish kerak bo'lmagan teglar ruxsat beriladigan_tags bahslari sifatida qabul qilinadi. Funktsiya ishlaydi, ammo yumshoq qilib, nomukammaldir. Kursda, kodga kiritilmagan matnni olib tashlashga olib keladigan kodning haqiqiyligini tasdiqlovchi ma'lumotlar mavjud emas.
Tashabbuskor rivojlanuvchilar qo'llarni qondirishmagan - tarmoqda siz o'zgartirilgan funktsiyalarni topishingiz mumkin. Yaxshi misol, strip_tags_smart.
Tayyor echimlarni - dasturchining shaxsiy tanlovini qo'llash yoki qo'llash. Shunday qilib, men tez-tez "universal" ishlov beruvchini talab qilmasligi va kodni muntazam tozalash uchun qulayroqdir.
Bir yoki boshqa qayta ishlash usulini tanlash nimani anglatadi?
1. Dastur materialidan va uni tahlilining murakkabligi.
Agar siz etarlicha oddiy HTMP matnlarini hal qilishingiz kerak bo'lsa, kunduzi aniq tartibsiz tartibsiz :), siz standart funktsiyalardan foydalanishingiz mumkin.
Agar matnlarda ma'lum xususiyatlar bo'lsa, uni ko'rib chiqish kerak, keyin maxsus xizmatchilar yoziladi. Siz shunchaki ba'zi str_replace-da ishlatilishi mumkin. Masalan:
$ \u003d â € "\u003d\u003e '' '" "" ", // o'ngdagi apostrofe (masalan, i)
"" ("\u003d\u003e" "" "" Nutq belgisi
"" "- \u003d\u003e" - "Uzoq tirish
"" \u003d\u003e "", // Yopish so'zi
"Ã" \u003d\u003e "É", // e aktiv urg'u
Chr (226). (128). CH (153) \u003d\u003e '', // yana o'ng-apostrof
Chr (226). (128). Chr (147) \u003d\u003e - - - yana dosh yana
Chr (226). (128). Cr (156) \u003d\u003e "" ", // ochilish nutq belgisi
Chr (226). (128). Kr (148) \u003d\u003e - - "yana
Chr (226). Cr (128) \u003d\u003e "" "" "
Cr (195). Cr (169) \u003d\u003e "É", // e aktive yana
);
oldindan ($ s ige \u003d\u003e $ almashtirish kabi)
{
$ Htmltext \u003d str_replace ($ igna, $ almashtiring, $ HTMLTEXT);
}
Boshqalar asoslanishi mumkin doimiy ifodalar. Misol sifatida:
Funktsiya GettextFROHTML ($ htmltext)
{
$ qidirish \u003d massiv ("""Si", // JavaScriptni olib tashlang
"""Si", // uslublarni olib tashlang
""
""<[\/\!]*?[^<>] *?\u003e "Si", // HTML-teglarni o'chirish
"" ([\\ r \\ n]) [\\ s] "", // bo'shliqlarni olib tashlang
"" & (kotirov | 34); "i", // HTML maxsus charlarini almashtirish
"" & (amp | 38); "Men",
"" & (lt | # 60); "Men"
"" & Gt | # 62); "Men",
"" & Nbsp | 160; "Men",
"" & Iexcl | 161); "Men",
"" & (Cent | # 162); "Men",
"" & (funt | # 163); "Men",
"" & (Nusxa ko'chirish | № 169); "Men"
"" (\\ d); "e"); // PHP deb yozing
$ almashtirish \u003d qator (",
"",
"",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
(161),
(162),
cr (163),
kr (169),
"Chr (\\\\ 1)");
Preg_Replace ($ qidirish, $ HTMLTEXT);
}
(Shunday daqiqada, preg_replace imkoniyatlari parametrlar bilan ishlashdan xursand bo'ladi). Agar kerak bo'lsa, massiv, muntazam ravishda muntazamliklaringizni to'ldiring. Bu sizga kompilyatsiyada, masalan, oddiy iboralar dizayneri yordam berishi mumkin. Boshlang'ich ishlab chiqaruvchilar "HTML yorliqlari haqida hamma foyda". Misorni tahlil qilib, misollar keltiring.
2. jilddan.
Hajmi tahlilning murakkabligi bilan bevosita bog'liq (oldingi paragrafdan). Ko'p sonli matnlar hamma narsani muntazam ravishda oldindan aytib berish va tozalash ehtimolini oshiradi, siz nimanidir sog'inishingiz mumkin. Bunday holda, "ko'p bosqichli" tozalash usuli mos keladi. Ya'ni birinchi navbatda, aytaylik, aytaylik, strip_tags_smart funktsiyasi (agar u o'chirilmasa). Keyin ba'zi matnlarni "anomaliyalar" aniqlash uchun tanlab ko'ring. Yaxshi, "biz anomaliyani muntazam ravishda tozalaymiz.
3. Natijada nima kerak.
Vaziyatga qarab qayta ishlash algoritmini qayta ishlash har xil usulda soddalashtirilgan bo'lishi mumkin. Oldingi maqolalardan birida men tomonidan tavsiflangan ish juda yaxshi namoyish etildi. Sizga eslatib beray, matni Div-E qismida edi - E, Adtifisli reklama, shunga o'xshash maqolalar ro'yxati bor edi. Maqolalarni tanlashda tahlil qilinganda, maqolalar mavjud bo'lmagan va shunchaki paragraflarga kiritilganligi aniqlandi. Chiquvchilarning "asosiy" bo'limini tozalamaslik uchun siz barcha paragraflarni topishingiz mumkin (oddiy HTML-dom Parser bilan juda oddiy) va tarkibini ulashingiz mumkin. Shunday qilib, muntazam tozalash, qara, past qon bilan shug'ullanishning iloji yo'q.
Umuman olganda, tarmoqda oddiy iboralar va tahlilchilar, norozilik namoyishi asosida, tarmoqning dom tuzilmasini tahlil qilish asosida, real echimlar. Bu erda, masalan, haddan tashqari ko'p. Begunoh
Kiruvchi ma'lumotlarni tekshirish va qayta ishlash dasturlashdagi umumiy vazifalardan biridir. PHP tili odatda veb-ilovalar uchun ishlatiladi, shuning uchun ular uchinchi tomon in'ektsiyalariga eng ko'p moyil bo'lganligi uchun eng mos keladigan HTML yorliqlarini olib tashlash. Ushbu maqolada siz eski uslubdagi Stip_tags () va uning chiplarini eslatib o'tmoqchiman, shuningdek, HTML teglari va bir vaqtning o'zida bir nechta foydali bonuslarni olib tashlash uchun echimlarni taklif qilmoqchiman.
Shunday qilib. Matndan HTML yorliqlarini o'chirish uchun asosiy vositasi - bu Strip_tags () funktsiyasi. Biz uni o'tamiz satr qiymati va undan HTML va PHP teglarini olib tashlaydi, masalan:
$ s \u003d "
Paragraf.
Hali ham matn. ";echo chiziq_tags ($ s);
Ushbu misol satrni ko'rsatadi:
Paragraf. Hali ham matn.
Shunisi e'tiborga loyiqki, bu funktsiya ikkinchi (ixtiyoriy, ammo foydali) Masalan, quyidagi parametr, masalan:
$ s \u003d "
Paragraf.
Hali ham matn. ";Echo chiziq_tags ($ s,
Ushbu misol satrni ko'rsatadi:
Paragraf.
Hali ham matn.
Menimcha, juda qulay. Shunga qaramay, bu muhim muammoni hal qilmaydi - hTML yorliqlarini o'chirishMasalan: Skript, Nascrat va uslub - ular eng keng tarqalgan. Men shu bo'limning yorliqlarini, shuningdek boshlanadigan variantlarni olib tashlashim kerak bo'lganda "< » и заканчивающиеся символом « > "Men quyidagi PHP kodidan foydalanaman:
$ p \u003d arra (
"""Si",
"""Si",
"""Si",
""<[\/\!]*?[^<>] *?\u003e "Si",
);
$ R \u003d qator ("", "" "" "" ");
$ \u003d preg_replace ($ p, $ r, $);
Bu erda $ P $ bir nechta muntazam ifodalarni o'z ichiga oladi va $ r - ularni almashtirish (Men bo'shliqlardan foydalanaman). Bu faqat satrda almashtirish kerak, va biz matndan HTML axlatni olib tashlaymiz.
Shubhasiz, yuqoridagi ikki qaror birlashtirilishi mumkin. Dastlab men oddiy iboralar orqali almashtirishdan foydalanaman, keyin chiziqchalar () va men o'z funktsiyasini noxmml () funktsiyamni olaman.
Va nihoyat, men sizga ko'proq foydali echimlarni taklif qilmoqchiman. Shunday qilib, matnda yorliqni almashtirish yaxshiroq, ikkinchisidagi ikkinchisining sharhi natijasi bir xil va muammo kamroq bo'ladi, masalan:
$ \u003d str_replace ("\\ t", "", $ S);
Agar siz struktsiya o'tkazmalari kerak bo'lmasa, ular ham bo'sh joylar bilan almashtirilishi mumkin, masalan:
$ \u003d str_replace ("\\ n", "\\ r") "", $ S);
Qo'shimcha bo'shliqlardan siz oddiy muntazam iborani yo'q qilishingiz mumkin, masalan:
$ s \u003d preg_replace ("/ \\ s +", ", $ S);
$ \u003d trim ($ s); // ortiqcha bo'lmaydi
Menda hamma narsa bor. E'tibor uchun rahmat. Omad!
21:56 da. | Xabarni tahrirlash |
Sizda brauzeringizda JavaScript bloklangan. JavaScript-ga saytni ishlashiga ruxsat bering!
prip_tags
(PHP 3\u003e \u003d 3.0,8, php 4, php 5)
prip_tags - HTML va PHP yorliqlarini satrlarni chiziqdan o'chiradiTavsif
Satr prip_tags (Tor str [, string satr manbai_tags])Ushbu xususiyat str satrini qaytaradi, ulardan HTML va PHP TAGS yo'q qilinadi. Teglarni olib tashlash uchun avtomatik funktsiyaga qo'llaniladigan funksiyaga o'xshash avtomatik ishlatiladi. fGets ().
Teglashni o'chirib bo'lmaydigan teglarni ko'rsatish uchun ixtiyoriy ikkinchi dalildan foydalanish mumkin.
DiqqatSharh: Ruxsatsion_tags falumi PHP 3.0.13 va PHP-ga 4,0b3 ga qo'shildi. HTML sharhlari, shuningdek, PHP 4.3.0-dan o'chiriladi.
Kabi strip_tags () HTML-kodning to'g'riligini tekshirmaydi, tugallanmagan teglar teglarga kiritilmagan matnni olib tashlashga olib kelishi mumkin.
Masalan 1. Foydalanish namunasi strip_tags ()
$ Matn \u003d "Paragraf.
Biroz ko'proq matn "; echo strip_tags ($ matnli); echo" \\ n \\----- \\ n "; // o'chirilmangEcho chiziq_tags ($ matnli,
"); // ruxsat berish ,, Echo chiziq_tags ($ matnli, ");
Ushbu misol keltiradi:
Paragraf. Biroz ko'proq matn -------------
Paragraf.
Bir oz matn
DiqqatUshbu xususiyat ruxsat beriladigan_tags bahslarida ko'rsatilgan teg atributlarini, shu jumladan uslub va onmofoverni o'zgartirmaydi.
Php 5.0.0 dan strip_tags () Ikkilik shaklda ma'lumotlarni qayta ishlash uchun xavfsiz.
Ushbu xususiyat jiddiy kamchilikka ega - bu teglarni olib tashlashda so'zlar qo'yiladi. Bundan tashqari, funktsiya zaiflikka ega. Muqobil xususiyat analog Strip_Tags:
C "* -" Nopok "HTML yorliq atribut qiymatlarida belgilar paydo bo'lishi mumkin bo'lgan" Nopok "HTML to'g'ri ishlov beriladi< > * - HTML * - sharhlar, skriptlar, uslublar, php, perl, ssengi, CDATA *-matnni avtomatik ravishda formatlashtiradi, agar u "Faks" turidan himoya qiladi: "<
Shuningdek, funktsiyaning tavsifiga qarang
Vazifa barcha yoki faqat ma'lum HTML teglarini o'chirish, ko'pincha yangi ma'lumot qo'shish uchun har qanday tashrif buyuruvchiga imkoniyat berish kerak bo'lgan joyda ro'y beradi. Eng keng tarqalgan misol, saytda mehmonlar kitobi yoki sharh tizimi bo'lishi mumkin. Shunday qilib qo'shilgan matnda matnni nusxalashda yoki ataylab "juda original" xabar berish uchun imkoniyat bilan qo'shilgan juda ko'p turli xil teglar bo'lishi mumkin. Skrixa teglarida zararli kodni yoki sahifa tartibini qo'shimcha teglar bilan buzish uchun zararli kodni berishga arziydi.
Ro'yxatdan o'tgan holatlarda, yangi ma'lumotlarni yozishdan oldin kerak, uni keraksiz HTML teglari bilan tozalang.
Matnni HTML teglaridan to'liq tozalash
Ko'pincha bunday vazifalar uchun muntazam ifodalar qo'llaniladi, ammo ushbu maqolada biz PHP funktsiyasidan foydalanib, thp funktsiyasidan foydalangan holda yorliqlarni o'chirish usulini ko'rib chiqamiz. Ushbu xususiyat shunchaki parametrda ko'rsatilgan satrdan teglarni o'chiradi.
$ str_in \u003d. " Mening matn dan har xil teglar.
$ str_out \u003d Strip_Tags ($ str_in);
echo $ str_out;
Ushbu ishlov berish natijasida $ str_out o'zgaruvchisida biz teglarsiz satr olamiz:
Turli xil teglar bilan mening matnim.
* Shuni ta'kidlash kerakki, Strip_tags funktsiyasi faqat teglarni ochish va yopiq yorliq orasiga qoldiradi.
Shaxsiy HTML teglarini matndan olib tashlash
Ba'zan satrdan faqat ma'lum teglarni olib tashlashingiz kerak. Bu erda biz shuningdek Strip_Tag funktsiyasidan foydalanamiz, ammo bu safar ikkinchi (ixtiyoriy) parametringiz siz saqlamoqchi bo'lgan teglarni ko'rsatamiz.
Masalan, satrni qayta ishlashda siz faqat havolalarni tark etishingiz kerak:
$ str_in \u003d. " Mening matn dan har xil teglar.
$ str_out \u003d Strip_Tags ($ str_in, "
);
echo $ str_out;
Ushbu ishlov berish natijasida o'zgaruvchan $ str_out-da:
Turli xil teglar bilan mening matnim.
Shunday qilib, siz satrda joiz bo'lgan barcha teglarni belgilashingiz mumkin, qolganlari esa o'chiriladi.
Ushbu maqolada yorliqlarni teglardan tozalashning eng oson usuli muhokama qilinadi. Boshqa imkoniyatlarni hisobga olgan holda, men ushbu maqolani kengaytiraman. Agar siz ushbu vazifani sharhlarda yoki elektron pochta orqali hal qilsangiz, men xursand bo'laman.