az internet ablakok Android

Szöveg tisztítása a felesleges HTML-címkékből - elemzés A - Z. A HTML sor címkéinek eltávolítása a PHP PHP-ben A HTML-címkék eltávolítása a sorból

A HTML tisztításával a felesleges címkékből, abszolút minden szemben van.

Az első dolog, ami eszébe jut, hogy használja a PHP-funkciót Strip_Tags ():
Strip_tags (string str [, string alladagle_tags)))

A funkció a címkékből megtisztított karakterláncot ad vissza. Azok a címkék, amelyeket nem kell törölni, az engedélyezett_tags argumentumként szolgál. A funkció működik, de enyhén, tökéletlen. A kurzus során nincs ellenőrzés a kód érvényességének, ami magában foglalhatja a címkékben nem szereplő szöveg eltávolítását.
A kezdeményezések fejlesztői nem teljesítették a kezét - a hálózaton találhatók módosított funkciókat. Jó példa a sík_tags_smart.

Alkalmazzon vagy ne alkalmazzon készenléti megoldásokat - a programozó személyes kiválasztása. Ez így történt, hogy leggyakrabban nem igényelnek "univerzális" kezelőt, és kényelmesebb, hogy rendszeresen tisztítsa meg a kódot.

Mitől függ az egyik vagy másik feldolgozási módszer kiválasztása?

1. A forrás anyagából és az elemzés összetettségéből.
Ha elég egyszerű HTMP-szöveget kell kezelnie, bármilyen trükkös elrendezés nélkül, naponta :), használhat szabványos funkciókat.
Ha vannak bizonyos jellemzők a figyelembe veendő szövegek, akkor speciális kézikönyveket írnak. Egyszerűen használható néhány str_replace. Például:

$ s \u003d tömb ("â € ™" \u003d\u003e "", // jobb oldali aposztróf (pl. i "m)
"â € œ" \u003d\u003e "", // nyitó beszédjel
"â €" "\u003d\u003e" - ", // hosszú kötőjel
"â €" \u003d\u003e "", // Bezáró beszédjel
"Ã" \u003d\u003e "É", // E akut akcentus
CHR (226). CHR (128). CHR (153) \u003d\u003e "", // jobb oldali apostróf
CHR (226). CHR (128). CHR (147) \u003d\u003e "-", // hosszú kötőjel újra
CHR (226). CHR (128). CHR (156) \u003d\u003e "" ", // beszédjel megnyitása
CHR (226). CHR (128). CHR (148) \u003d\u003e "-", // m kötőjel újra
CHR (226). CHR (128) \u003d\u003e "" ", // Jobb beszédjel
CHR (195). CHR (169) \u003d\u003e "É", // E akut újra
);

foreach ($ s, mint $ tű \u003d\u003e $ csere)
{
$ Htmltext \u003d str_replace ($ tű, $ csere, $ htmltext);
}

Mások alapulhatnak rendszeres kifejezések. Mint például:

Funkció gettextfromhtml ($ htmltext)
{
$ keresés \u003d tömb (""]*?>.*?"SI", // eltávolítsa a JavaScriptet
""]*?>.*?"Si", // Távolítsa el a stílusokat
""]*?>.*?"SI", // Eltávolítsa az XML-címkéket
""<[\/\!]*?[^<>] *?\u003e "SI", // eltávolítja a HTML-címkéket
"" ([\\ r \\ n]) [s] "", // eltávolítja a tereket
"" és (34. # 34); "i", // Cserélje ki a HTML speciális karaktereket
"" & (amp | # 38); "Én",
"" & (LT | # 60); "I",
"" & Gt | # 62); "I",
"" & Nbsp | # 160); "I",
"" És IEXCL | # 161); "I",
"" & (Cent | # 162); "I",
"" & (font | 163); "I",
"" & (Másolás | # 169); "I",
"" (d); "E"); // írj, mint php

$ csere \u003d tömb (",
"",
"",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
CHR (161),
CHR (162),
CHR (163),
CHR (169),
"CHR (\\\\ 1)");

RETURN PREG_REACH ($ SEARCH, $ csere, $ htmltext);
}
(Ilyen perceken azonban a preg_replace lehetősége örömmel fog működni a tömbökkel paraméterekként). Egy tömb, ha szükséges, kiegészíti a rendszeres szabályokat. Segíthet az összeállításukban, például ez a rendszeres kifejezések tervezõje. A kezdő fejlesztők hasznos cikkek lehetnek "minden a HTML-címkékről. 9 Rendszeres expressz a HTML-címkék csíkához". Nézd meg a példákat, elemezzük a logikát.

2. A kötetektől.
A mennyiségek közvetlenül kapcsolódnak az elemzés összetettségéhez (az előző bekezdésből). Számos szöveg növeli annak valószínűségét, hogy megpróbálja előrelátni és mindent tisztítani rendszeresen, akkor hiányozhat valamit. Ebben az esetben a "multistage" tisztítási módszer alkalmas. Azaz, világos első, mondjuk, a strip_tags_smart funkció (forráskód csak abban az esetben nem törli). Ezután szelektíven nézzen meg néhány szöveget az "anomáliák" azonosítására. Nos, "Rendszeresen" tisztítsa meg az anomáliát.

3. Az eredményeként meg kell szerezni.
A feldolgozó algoritmus különböző módon egyszerűsíthető a helyzet függvényében. Az előző cikkek egyikében leírt eset jól látható. Hadd emlékeztessem önöket, a szöveg csak a div - e, ahol volt még egy div „zsemlemorzsa” adsens reklám, egy listát a hasonló termékek. A cikkek kiválasztásának elemzése során azt találták, hogy a cikkek nem tartalmaznak mintákat, és egyszerűen megszakadnak a bekezdésekre. Annak érdekében, hogy ne tisztítsa meg a kívülállók "Main" osztását, megtalálja az összes bekezdéseket (az egyszerű HTML DOM parser nagyon egyszerű), és csatlakoztassa a tartalmát. Tehát a rendszeres tisztítás, nézd meg, lehetetlen az alacsony vérrel.

Általában a támogatói a HTML-kód elemzés alapján reguláris kifejezések, és az elemzés, amelynek alapja az elemzés a DOM dokumentum szerkezete, igazi holivars fellángolt a hálózaton. Itt például a túlfolton. Ártatlan

A bejövő adatok ellenőrzése és feldolgozása a programozás egyik közös feladata. PHP nyelv általában használt webes alkalmazások, ezért itt a leglényegesebb eltávolítása HTML a szövegből, mert a leginkább fogékonyak a harmadik fél injekciót. Ebben a cikkben szeretnék emlékeztetni Önt a régimódi stip_tags () és a zsetonjairól, és megoldásokat kínál a szekcionált HTML-címkék eltávolítására és egy pár hasznos bónuszra egyidejűleg.

Így. A HTML-címkék törlésének fő eszköze a szövegből a Strip_Tags () funkció. Átadjuk húr érték, és eltávolítja a HTML és a PHP címkéket, például:

$ s \u003d "

Bekezdés.

Még szöveg. ";
echo strip_tags ($ s);

Ez a példa megjeleníti a karakterláncot:

Bekezdés. Még szöveg.

Érdemes megjegyezni, hogy a funkció a második (Választható, de hasznos) A paraméter, amelynek értéke egy karakterlánc, amelynek listája megengedett HTML-címkék, például:

$ s \u003d "

Bekezdés.

Még szöveg. ";
Echo strip_tags ($ S "

Ez a példa megjeleníti a karakterláncot:

Bekezdés.

Még szöveg.

Véleményem szerint nagyon kényelmes. Mindazonáltal nem oldja meg az egyik fontos problémát - a szekcionált HTML-címkék törlésePéldául: szkript, noscript és stílus - a leggyakoribbak. Amikor el kell távolítanom az ilyen szakaszcímkéket, valamint a "< » и заканчивающиеся символом « > "A következő PHP-kódot használom:

$ p \u003d tömb (
""]*?>.*?"Si",
""]*?>.*?"Si",
""]*?>.*?"Si",
""<[\/\!]*?[^<>] *?\u003e "Si",
);
$ R \u003d tömb ("", "", "", ");
$ s \u003d preg_replace ($ p, $ r, $ s);

Itt a $ p változó rendszeres kifejezéseket tartalmaz, és $ r egy tömb, hogy cserélje ki őket (Hiányzást használok). Csak a karakterláncban cserélje ki, és eltávolítjuk a HTML szemetet a szövegből.

Nyilvánvaló, hogy a két fenti döntés kombinálható. Kezdetben a rendszeres kifejezések révén cserélem, majd a Strip_Tags () és a Saját funkció a NOHTML ().

Végül néhány hasznos megoldást szeretnék kínálni. Tehát a szövegben jobb helyettesíteni a fület, a másik a böngésző értelmezésének eredménye azonos, és a baj kevésbé lesz, például:

$ s \u003d str_replace ("\\ t", "", $ s);

Ha nincs szükség stringtranszferekre, akkor is helyettesíthetők szóközökkel, például:

$ s \u003d str_replace (tömb ("\\ n", "\\ r"), "", $ s);

Az extra terekből megszabadulhat egy egyszerű rendszeres kifejezésből, például:

$ s \u003d preg_replace ("/ s + /", "", $ s);
$ s \u003d trim ($ s); // nem lesz felesleges

Mindentem van. Kösz a figyelmet. Sok szerencsét!

21: 56-kor. Üzenet szerkesztése

Van egy JavaScript blokkolva a böngészőben. Hagyja, hogy a JavaScript dolgozzon a webhelyen!

csíkos_tags

(PHP 3\u003e \u003d 3.0.8, PHP 4, PHP 5)

csíkos_tags - Törli a HTML és a PHP címkéket a sorból

Leírás

Húr csíkos_tags (String str [, string megengedhető_tags]))

Ez a funkció visszaadja a string string, amelyből HTML és PHP címkék eltávolításra kerülnek. A címkék eltávolításához az automatikus használat hasonlít a funkcióhoz alkalmazott funkcióhoz. fgetss ().

Opcionális második érv használható olyan címkék jelzésére, amelyeket nem szabad törölni.

Megjegyzés: Engedélyezhető_TAGS argumentumot adtunk a PHP 3.0.13 és PHP 4.0B3-hoz. HTML megjegyzéseket is töröltek a PHP 4.3.0.

Figyelem

Mint strip_tags () Nem ellenőrzi a HTML-kód helyességét, a befejezetlen címkék a címkékben nem szereplő szöveg eltávolításához vezethetnek.

1. példa Példa a használatra strip_tags ()
$ Szöveg \u003d "

Bekezdés.

Egy kicsit több szöveg "; echo strip_tags ($ szöveg); echo" \\ n \\ n ------- \\ n "; // ne törölje

Echo strip_tags ($ szöveg, "

"); // Lehetővé teszi ,, Echo strip_tags ($ szöveg, " ");

Ez a példa kimutatja:

Bekezdés. Egy kicsit több szöveg -------

Bekezdés.

Egy kis szöveg

Figyelem

Ez a funkció nem módosítja az engedélyezett_tags argumentumban megadott tag attribútumokat, beleértve a stílust és az onmouseustant.

A PHP 5.0.0 strip_tags () Biztosítani kell az adatfeldolgozás bináris formában.

Ez a funkció jelentős hátránya van - ez a szavak ragasztása a címkék eltávolításakor. Ezenkívül a funkciónak sérülékenysége van. Alternatív tulajdonság analóg csík_tags:

C "* - A" piszkos "HTML-t megfelelően feldolgozzák, ha szimbólumok jelentkezhetnek a címke attribútum értékeiben< > * - Helyesen feldolgozott HTML * - Vágott megjegyzések, szkriptek, stílusok, php, perl, ASP kód, MS Word Taggy, CDATA * - szöveges automatikusan formátumok, ha HTML-kódot tartalmaz * - Hamkok elleni védelem: "<script\u003e Alert ("Hi")script\u003e "* * @param string $ s * @param Array $ Deseable_tags A címkék tömbje, amely nem lesz vágva * Példa:" B "- A címke attribútumokkal marad:" "- A címke attribútumok nélkül marad * @param bool $ is_format_spaces formátumú terek és string transzferek? * A kimeneti szöveg típusa (sima) a böngészőben a bemeneten belüli szöveggel. * Más szóval, a szöveg / html Szöveg / síkság. * A szöveg csak akkor van formázva, ha bármilyen címkét kivágott. * @Param Array $ Pair_Tags tömbje nedves címkék, amely törlésre kerül a tartalom mellett * Lásd az alapértelmezett értékeket * @param Array $ para_tags Címkék, amelyeket a bekezdések (ha $ is_format_spaceds \u003d true) érzékelnek * lásd az alapértelmezett értékeket * @return string * * @license http://creativecommons.org/licenes/by-sa/3.0/ * @author nasibullin rinat , http: //oglenie.ru/ * @charset ANSI * @Version 4.0.14 * / funkció Strip_Tags_Smart (/ * String * / $ S, tömb $ engedélyezhető_tags \u003d , / * Boolean * / $ is_format_spaces \u003d True, Array $ PAIL_TAGS \u003d Array ("Script", "Stílus", "Térkép", "Iframe", "Frameset", "Objektum", "Applet", "CO "," Gomb "," TEXTAREA "," SELECT "), Array $ para_tags \u003d tömb (" P "," TD "," TH "," LI "," H1 "," H3 ", "H4", "H5", "H6", "DIV", "forma", "Cím", "Pre") (// Return Strip_Tags ($ s); Statikus $ _callback_type \u003d hamis; statikus $ _lowable_tags \u003d tömb (); statikus $ _para_tags \u003d tömb (); #Regular expression for tag attribútumok #correct folyamatok piszkos és törött html egy singsbyte vagy multibyte utf-8 karakter! Statikus $ re_atttrs_fast_safe \u003d "(?!) #Statement, amely a #correct attribútumok (?\u003e [^\u003e" \\ "] + | (?<=[\=\x20\r\n\t]|\xc2\xa0) "[^"]*" | (?<=[\=\x20\r\n\t]|\xc2\xa0) \"[^\"]*\")* #incorrect attributes [^>] * + "; ha (IS_ARRAY ($ S)) (ha ($ _CALLBABAD_TYPE \u003d\u003d\u003d" STRIP_TAGS ") ($ TAG \u003d STRTOLOWER ($ S); ha ($ _Lowable_tags) (# $ _allowable_tags) (# $ _allowable_tags) (# Attribútumok, ha (Array_Key_Exists ($ Címke, $ _lowable_tags)) vissza $ s; #tag attribútumok nélkül, ha (Array_key_Exists ("<" . $tag . ">", $ _lowable_tags)) (ha ($ s, 0, 2) \u003d\u003d\u003d"", ha (SUPTR ($ S, -2) \u003d\u003d\u003d" /\u003e ") visszatér"<" . $tag . " />"; Visszatérés"<" . $tag . ">";)) Ha ($ címke \u003d\u003d\u003d\u003d" br ") visszatér", ha ($ _para_tags && array_key_exists ($ címke, $ _para_tag)) visszatér "\\ r \\ n \\ n"; visszatérés "",) trigger_error ("Ismeretlen visszahívási típus". "$ _callback_type." "" ", E_USER_ERROR);), ha (($ pos \u003d strppos ($ s,"<")) === false || strpos($s, ">", $ POS) \u003d\u003d\u003d FALSE) #Speed \u200b\u200bjavítás (#tags nem található $ s,) $ Hossz \u003d Strlen ($ s); #unpaired címkék (nyitás, zárás ,! $ Re_tags \u003d "~: * +)?) # 1 ". $ Re_attrs_fast_safe."\u003e ~ SXSX "; $ Patterns \u003d Array ("<([\?\%]) .*? \\1>/ Sxsx ", # Beépített PHP, Perl, ASP kód" /<\!\\]>/ Sxsx ", # CDATA #" blokkok "/<\!\[ [\x20\r\n\t]* .*? \]>/ Sxsx ", #: Elavult: MS Word Tagged Tag... "/<\!--.*?-->/ Ssx ", # Megjegyzések #ms szó címkézett típus...", # Feltételes végrehajtási kód az IE típushoz" HTML "# Feltételes végrehajtási kód az IE típushoz" HTML."# Lásd http://www.tigir.com/comments.htm" /<\! (?:--)?+ \[ (?> [^] "\\"] + | "[^"] * "| \\" [^ \\ "] * \\") *) * \\] (?: -)? +\u003e / sxsx ",); ha ($ pair_tags) (# $ cai_tags) (# páros címkék együttesen: foreach ($ cai_tags as $ k \u003d\u003e $ v) $ pair_tags [$ k] \u003d preg_quote ($ V, "/"); $ minták \u003d "/<((?i:" . implode("|", $pair_tags) . "))" . $re_attrs_fast_safe . "(? .*? <\/(?i:\\1)" . $re_attrs_fast_safe . "> / Sxsx ";) #d ($-minták); $ i \u003d 0; # védelem a $ max \u003d 99 ellen; míg ($ i< $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); ha (preg_last_error ()! \u003d\u003d preg_no_error) ($ i \u003d 999, szünet,))) egy olyan címke, amely nem lesz vágva, ha ($ engedélyezhető_tags) $ _lowable_tags \u003d array_flip ($ engedélyezhető_tags); # párosított címkék, amelyeket bekezdésekként fognak észlelni, ha ($ para_tags) $ _para_tags \u003d array_flip ($ para_tags);)) #fi #tags feldolgozás, ha ($ IS_HTML) ($ _CALLBACK_TYPE \u003d "STRIP_TAGS"; $ s2 \u003d preg_replace_callback ($ re_tags, __function__, $ s2); $ _callback_type \u003d hamis; ha (preg_last_error ()! \u003d\u003d preg_no_Error) ($ i \u003d 999, szünet;)) Ha ($ s \u003d\u003d\u003d $ s2)) $ S \u003d $ s2; $ i ++;) #hile, ha ($ i\u003e \u003d $ max) $ s \u003d sík_tags ($ s); # sok ciklus a csere ... ha ($ is_format_spaces && stlen ($ s) )! \u003d \u003d $ Hosszúság) (# # ismétlődő szóköz $ s \u003d preg_replace ("/ x20 \\ x20 ++ / ssx", "", trim ($ s)); # Régelyek az új vonalak előtt és után s \u003d str_replace (tömb ("\\ r \\ x20", "\\ x20 \\ r \\ n"), "\\ r \\ n", $ s); #Replace 3 és újabb vonalak 2 új sorba $ s \u003d preg_replace ("/ [\\ r \\ n] (3,) + / ssx", " ) Vissza $ s; )?\u003e.

Lásd még a funkció leírását is

Feladat Törölje az összes vagy csak bizonyos HTML-címkéket a sorból gyakran abban az esetben fordul elő, ahol szükség van lehetőség arra, hogy bármely látogató új információkat adjon hozzá. A leggyakoribb példa lehet vendégkönyv vagy megjegyzésrendszer a webhelyen. Az a szöveg, így hozzáadott tartalmazhat sok különböző címkét adunk véletlenül, amikor a másolás szöveget, vagy szándékosan, hogy egy üzenet valahogy „nagyon eredeti.” Érdemes megjegyezni ugyanazt és a rosszindulatú próbálkozást, hogy rosszindulatú kódot tegyen a szkript címkékben, vagy megpróbálja elrontani az oldal elrendezését extra címkékkel.

A felsorolt \u200b\u200besetekben az új információk rögzítése előtt szükséges, tisztítsa meg a felesleges HTML-címkékből.

A HTML-címkék szövegének teljes tisztítása

Gyakran előfordul, hogy rendszeres kifejezéseket használnak az ilyen feladatokhoz, de ebben a cikkben a legegyszerűbb módszert vizsgáljuk - a címkék törlése a PHP funkcióval Strip_tags segítségével. Ez a funkció egyszerűen törli a címkéket a paraméterben megadott karakterláncból.

$ str_in \u003d. "

Az én szöveg tól től különféle Címkék.

" ;
$ str_out \u003d strip_tags ($ str_in);
echo $ str_out;

Ennek eredményeként a feldolgozás a $ str_out változóban kapunk egy karakterláncot:

A szövegem különböző címkékkel.

* Érdemes megjegyezni, hogy a strip_tags függvény eltávolítja csak a magukat a tagokat, így azok tartalma között a nyitó és záró tag.

Az egyes HTML-címkék eltávolítása a szövegből

Néha csak bizonyos címkét kell eltávolítania a karakterláncból. Itt is használjuk a Strip_Tags funkciót, de ezúttal a második (opcionális) paraméter jelzi a menteni kívánt címkéket.

Például egy karakterlánc feldolgozásakor csak linkeket kell hagynia:

$ str_in \u003d. "

Az én szöveg tól től különféle Címkék.

" ;
$ str_out \u003d strip_tags ($ str_in, " " );
echo $ str_out;

Ennek eredményeként a feldolgozás egy változó $ str_out kapunk:

A szövegem különböző címkékkel.

Így megadhatja az összes olyan címkét, amely megengedett a karakterláncban, míg mindenki más törlődik.


Ez a cikk a legegyszerűbb módja a címkékből történő tisztításának legegyszerűbb módja. Más lehetőségek figyelembevételével bővítem ezt a cikket. Örülök, hogy megoldást nyújt erre a feladatra megjegyzésekben vagy e-mailben.