Internet Derazalar Android
Kengaytirmoq

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
""]*?>.*?"Si", // XML teglarini 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'chiradi

Tavsif

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.

Sharh: 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.

Diqqat

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'chirilmang

Echo chiziq_tags ($ matnli,

"); // ruxsat berish ,, Echo chiziq_tags ($ matnli, ");

Ushbu misol keltiradi:

Paragraf. Biroz ko'proq matn -------------

Paragraf.

Bir oz matn

Diqqat

Ushbu 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: "<skript\u003e ogohlantirish ("Salom")script\u003e "* * @param strasi $ s * @param massiv $ ruxsatlari * Masalan:" B "- teg atributi bilan qoladi" "- teglar fazilatlarsiz qoladi * @param Bool $ Is_Format_spass formatidagi brauzerdagi brauzerdagi brauzerdagi brauzerdagi brauzerdagi brauzerdagi matnni yoqing. Matn / tekis. * Matnda biron bir teglar kesilgan bo'lsa, faqat namozlarni o'chirib qo'yiladi * @param Ardik dolzarb baholari * @param arrags massiv Paragraflar sifatida qabul qilinadigan teglar (agar $ is_ formvat_spase \u003d rost) * @/crearearecommons.org/license httet-sa/3.0/ * @ pricensese-ga qarang , http: //ogenetee.ru/ * @charset ansi * / funktsiyasi, Caslay_tags_Smars \u003d NULL, / * Boolecs \u003d NOLE_FORT_SPASS \u003d TREET, Compy $ Pair_Tags \u003d array ( "skript", "Style", "haritasi", "iframe", "frameset", "ob'ekt", "Applet", "CO MMENT "," tugmasi "," Textarea "," tanlash "), Array $ Para_Tags \u003d array (" P "," TD "," TH "," Li "," H1 "," H2 "," h3 ", "H4", "H5", "H6", "Forma", "Sarlavha", "Sarlavha", "Oldingi") ($ s); Statik $ _callback_type \u003d noto'g'ri; Statik $ _AWBBBBTBLS_TAGs \u003d CAST (); statik $ _para_tags \u003d massiv (); Yorliq atributlari uchun #currektlar iflos va buzilgan HTML-ni birlikka yoki multilabayt UTF-8 Charset-da jarayonlar Static $ Re_attrs_safe \u003d "(?!) # -Corrist atributlari (? \\\u003e [\\ '» (?)<=[\=\x20\r\n\t]|\xc2\xa0) "[^"]*" | (?<=[\=\x20\r\n\t]|\xc2\xa0) \"[^\"]*\")* #incorrect attributes [^>] * + "; agar ($ _calback_tgs) ($ _calback_tgs) ($ _calbags) ($ _cal_tags); agar ($ _keyl_Exists ($) ($ Yorliq, $ _ukable_tags)) $ s; # strelkasiz (Array_key_existlar (»<" . $tag . ">", $ _ukable_tags)) (agar (Subr ($ ($, 0, 2) \u003d\u003d\u003d""; agar (subtrad ($ s, -2) \u003d\u003d\u003d / /\u003e) qaytish"<" . $tag . " />"; Qaytish"<" . $tag . ">";)" "\\ r \\ n"; ($ _para_tags) qaytarilsa, "\\ r \\ n \\ r \\ r \\ r \\ r \\ r"; qaytish "";) Trigager_error ("Noma'lum qo'ng'iroq qilish turi". "$ _callback_type". "" "", E_USERE_EROR);) if (($ ($ s)<")) === false || strpos($s, ">",, $ Pos) \u003d\u003d\u003d FALSEL) # $ SAQLANMAYDI (#Taglar topilmadi, $ uzunligi ($ s); # strlen ($ s) (ochish, yoping, dotype, ms so'zli nomlar $ Re_tags \u003d "~: * +) # 1 ". $ Re_attrs_sfe."\u003e Sxsx "; $ costs \u003d massiv (" / massiv)<([\?\%]) .*? \\1>/ Sxsx ", # o'rnatilgan php, perl, sent kodi" /<\!\\]>/ Sxsx ", # cdata #" bloklar "/<\!\[ [\x20\r\n\t]* .*? \]>/ Sxsx ", #: eskirgan: ms Word yoritilgan teg... "/<\!--.*?-->/ Ssx ", # sharhlar #MS so'zi yorliqlangan turi...", # Shartli ravishda bajarilishi kodi" HTML "# Shartli ravishda bajarilishi kodi" Html"# Http://www.tigir.com/cys.htm" /<\! (?:--)?+ \[ (?> [^ \\] "\\"] + | "[^"] * "| \\" [\\ \\ "] * \\") * \\ ") * \\] (? \\)? + \\] ($ juftglar) (# juft teglar bilan birgalikda tarkib bilan birga) ($ juftlik_tags $ c \u003d\u003e $ v) $) $ con_tags [$ k] \u003d preg_quote ($ v, / »/"); $ naqsh \u003d "/<((?i:" . implode("|", $pair_tags) . "))" . $re_attrs_fast_safe . "(? .*? <\/(?i:\\1)" . $re_attrs_fast_safe . "> / Sxsx ";) #d ($ cents); $ i \u003d 0; # $ 2. 99;< $max) { $s2 = preg_replace($patterns, "", $s); if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } if ($i == 0) { $is_html = ($s2 != $s || preg_match($re_tags, $s2)); if (preg_last_error() !== PREG_NO_ERROR) { $i = 999; break; } if ($is_html) { if ($is_format_spaces) { /* В библиотеке PCRE для PHP \s - это любой пробельный символ, а именно класс символов [\x09\x0a\x0c\x0d\x20\xa0] или, по другому, [\t\n\f\r \xa0] Если \s используется с модификатором /u, то \s трактуется как [\x09\x0a\x0c\x0d\x20] Браузер не делает различия между пробельными символами, друг за другом подряд идущие символы воспринимаются как один */ #$s2 = str_replace(array("\r", "\n", "\t"), " ", $s2); #$s2 = strtr($s2, "\x09\x0a\x0c\x0d", " "); $s2 = preg_replace("/ [\x09\x0a\x0c\x0d]++ | <((?i:pre|textarea))" . $re_attrs_fast_safe . "(? .+? <\/(?i:\\1)" . $re_attrs_fast_safe . "> \\ K / sxsx ",, $ s2); agar ($ i \u003d 999;) ($ ruxsatnomangiz) $ ($ leg_tags) $ _Anlable_tags \u003d) o'chirilmagan teglar \u003d Comrey_FLIP ($ ruxsatno_tags); ($ para_tgs) sifatida qabul qilinadigan paragraflar sifatida qabul qilinadi; ($ _calbag_type) ($ _calbag_type) ($ _calback_type); s2 \u003d preg_replacack ($ re_tags, __falback__, $__, $__, $ ____ \u003d 999;) if ($ \u003d\u003d\u003d $ s2) tanaffus bo'lsa; $ S \u003d $ s2; $ i ++;) Agar ($ a $ i\u003e maksimal), agar ($ a / formrat_prics && strlen ($ s). )! \u003d \u003d $ Uzunligi) (# Preg_Replace ("/ \\ x20 \\ x20 ++ / ssx", ", trice ($ s)), yangi chiziqlar oldingida s \u003d str_replace ("\\ r \\ x20", "\\ r \\ n", "\\ r \\ n", $ 3 va boshqa yangi liniyalar $ 3 va boshqa yangi liniyalarga $ s \u003d Preg_raccast ("/ [\\ r \\ n] (3,) + / SSX", " ) $ S ni qaytarish; )?\u003e.

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.