JavaScript je vo vašom prehliadači zablokovaný. Povoľte JavaScript pre túto stránku!
strip_tags
(PHP 3 >= 3.0.8, PHP 4, PHP 5)
strip_tags- Odstráni HTML a PHP tagy z reťazcaPopis
reťazec strip_tags(reťazec str[, reťazec allowable_tags])Táto funkcia vráti reťazec str s odstránenými značkami HTML a PHP. Na odstránenie značiek sa používa automat podobný tomu, ktorý sa používa vo funkcii fgetss() .
Voliteľný druhý argument možno použiť na určenie značiek, ktoré by sa nemali odstraňovať.
Pozornosťkomentár: Argument allowable_tags bol pridaný v PHP 3.0.13 a PHP 4.0b3. Od PHP 4.3.0 sú odstránené aj HTML komentáre.
Ako strip_tags() nekontroluje správnosť HTML kódu, nedokončené tagy môžu viesť k odstráneniu textu, ktorý sa v tagoch nenachádza.
Príklad 1: Príklad použitia strip_tags()
$text = "Odsek.
Ešte nejaký text"; echo strip_tags($text); echo "\n\n-------\n"; // nemazaťecho strip_tags($text, "
"); // Povoliť ,,echo strip_tags($text, " ");
Tento príklad vypíše:
Odsek. Ešte nejaký text -------
Odsek.
Ešte nejaký text
PozornosťTáto funkcia nemení atribúty značiek špecifikovaných v argumente allowable_tags, vrátane štýlu a onmouseover.
Od PHP 5.0.0 strip_tags() bezpečné manipulovať s údajmi v binárnej forme.
Táto funkcia má značnú nevýhodu - je to lepenie slov pri odstraňovaní značiek. Okrem toho má funkcia slabé miesta. Alternatívna funkcia podobná strip_tags:
c" * - "špinavý" html je správne spracovaný, keď možno v hodnotách atribútov značky nájsť znaky< >* - poškodený html je spracovaný správne * - komentáre, skripty, štýly, PHP, Perl, ASP kód, MS Word tagy, CDATA sú vystrihnuté * - text je automaticky naformátovaný, ak obsahuje html kód * - ochrana proti falzifikátom ako: "<
Pozri tiež popis funkcie
Úloha odstrániť všetky alebo len určité html značky z reťazca často vzniká tam, kde je potrebné poskytnúť príležitosť každému návštevníkovi stránky pridať nové informácie. Najbežnejším príkladom by bola kniha návštev alebo systém komentárov na webovej stránke. Takto pridaný text môže obsahovať veľa rôznych značiek, pridaných náhodne pri kopírovaní textu alebo zámerne, aby bola správa akosi „veľmi originálna“. Za zmienku stoja aj zlomyseľné pokusy zaviesť na stránku škodlivý kód v značkách skriptov alebo pokus pokaziť vzhľad stránky zbytočnými značkami.
V každom z týchto prípadov je potrebné pred napísaním nových informácií odstrániť nepotrebné html značky.
Kompletné vyčistenie textu od html tagov
Na takéto úlohy sa často používajú regulárne výrazy, ale v tomto článku zvážime najjednoduchšiu metódu - odstránenie značiek pomocou funkcie strip_tags php. Táto funkcia jednoducho odstráni značky z reťazca uvedeného v parametri.
$str_in = " môj text s rôzne značky.
$str_out = strip_tags($str_in);
echo $str_out;
Výsledkom takéhoto spracovania v premennej $str_out je reťazec bez značiek:
Môj text s rôznymi značkami.
* Všimnite si, že funkcia strip_tags odstráni iba samotné štítky, pričom ich obsah ponechá medzi úvodným a záverečným štítkom.
Odstránenie jednotlivých html značiek z textu
Niekedy je potrebné z reťazca odstrániť iba určité značky. Tu použijeme aj funkciu strip_tags, no tentoraz druhým (voliteľným) parametrom sú značky, ktoré sa majú uložiť.
Napríklad pri spracovaní reťazca musíte ponechať iba odkazy:
$str_in = " môj text s rôzne značky.
$str_out = strip_tags($str_in, " "
);
echo $str_out;
Výsledkom takéhoto spracovania v premennej $str_out dostaneme:
Môj text s rôznymi značkami.
Týmto spôsobom môžete zadať všetky značky, ktoré sú platné v reťazci, zatiaľ čo všetky ostatné sú odstránené.
Tento článok popisuje najjednoduchší spôsob vymazania reťazca zo značiek. Vzhľadom na ďalšie možnosti tento článok rozšírim. Budem rád, ak v komentároch alebo e-mailom ponúknete svoje možnosti riešenia tohto problému.
Úplne každý stojí pred úlohou vyčistiť html od nepotrebných značiek.
Prvá vec, ktorá vám príde na myseľ, je použiť funkciu strip_tags() php:
string strip_tags (reťazec str[, string allowable_tags])
Funkcia vracia reťazec zbavený značiek. Allowable_tags sú značky, ktoré by sa nemali odstraňovať. Funkcia funguje, ale mierne povedané, nedokonalá. Počas toho sa nekontroluje platnosť kódu, čo môže viesť k odstráneniu textu, ktorý nie je zahrnutý v značkách.
Vývojári iniciatívy nezostali nečinní – na sieti nájdete vylepšené funkcie. Dobrým príkladom je strip_tags_smart .
Či použiť hotové riešenia alebo nie, je osobná voľba programátora. Stalo sa, že najčastejšie nepotrebujem "univerzálny" handler a je pohodlnejšie vyčistiť kód pomocou regulárnych výrazov.
Čo určuje výber jednej alebo druhej metódy spracovania?
1. Z východiskového materiálu a zložitosti jeho rozboru.
Ak potrebujete spracovať pomerne jednoduché htmp texty, bez akéhokoľvek nápaditého rozloženia, jasné ako deň :), potom môžete použiť štandardné funkcie.
Ak majú texty určité vlastnosti, ktoré je potrebné vziať do úvahy, potom sú tu napísané špeciálne manipulátory. Niektorí môžu použiť iba str_replace . Napríklad:
$s = array("’" => "'", // Pravý apostrof (napr. v I"m)
"“" => """, // Otváracia značka reči
"â€"" => "—", // Dlhá pomlčka
"â€" => """, // Značka ukončenia reči
"Ã" => "é", // e ostrý prízvuk
chr(226) . chr(128) . chr(153) => "'", // Opäť pravý apostrof
chr(226) . chr(128) . chr(147) => "—", // Opäť dlhá pomlčka
chr(226) . chr(128) . chr(156) => """, // Otváracia značka reči
chr(226) . chr(128) . chr(148) => "—", // Znova pomlčka
chr(226) . chr(128) => """, // Pravá značka reči
chr(195) . chr(169) => "é", // e opäť akútne
);
foreach ($s ako $needle => $nahradiť)
{
$htmlText = str_replace($ihla, $nahradit, $htmlText);
}
Iné môžu byť založené na regulárne výrazy. Ako príklad:
Funkcia getTextFromHTML($htmlText)
{
$search = array("""si", // Odstrániť javascript
"""si", // Odstránenie štýlov
""
""<[\/\!]*?[^<>]*?>"si", // Odstránenie značiek HTML
""([\r\n])[\s] "", // Odstráňte medzery
""&(quot|#34);"i", // Nahradenie špeciálnych znakov HTML
""&(amp|#38);"i",
""&(lt|#60);"i",
""&(gt|#62);"i",
""&(nbsp|#160);"i",
""&(iexcl|#161);"i",
""&(cent|#162);"i",
""&(libra|#163);"i",
""&(kopírovať|#169);"i",
""(\d);"e"); // napíšte ako php
$nahradit = pole("",
"",
"",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
Return preg_replace($search, $replace, $htmlText);
}
(V časoch, ako je tento, je viac ako kedykoľvek predtým pekné mať možnosť použiť preg_replace s poľami ako parametre.) V prípade potreby doplníte pole svojimi regulárnymi výrazmi. Napríklad tento konštruktor regulárneho výrazu vám môže pomôcť pri ich kompilácii. Pre začínajúcich vývojárov môže byť užitočný článok „Všetko o značkách HTML. 9 regulárnych výrazov na odstránenie značiek HTML“. Hľadajte tam príklady, analyzujte logiku.
2. Zo zväzkov.
Objemy priamo súvisia so zložitosťou analýzy (z predchádzajúceho odseku). Veľké množstvo textov zvyšuje pravdepodobnosť, že pri snahe predvídať a upratať všetko pomocou regulárnych výrazov vám môže niečo uniknúť. V tomto prípade je vhodná metóda „viacstupňového“ čistenia. To znamená, že najskôr ho vymažte, napríklad pomocou funkcie strip_tags_smart (zdroje pre každý prípad nevymažeme). Potom selektívne preskúmame určitý počet textov, aby sme identifikovali „anomálie“. No a anomálie „upratujeme“ regulárnymi výrazmi.
3. Z toho, čo potrebujete získať ako výsledok.
Algoritmus spracovania môže byť zjednodušený rôznymi spôsobmi v závislosti od situácie. Prípad, ktorý som opísal v jednom z predchádzajúcich článkov, to dobre demonštruje. Pripomeniem, že text tam bol v dive, v ktorom bol okrem neho aj div s „strúhankou“, reklama na adsense, zoznam podobných článkov. Pri analýze vzorky článkov sa zistilo, že články neobsahujú obrázky a sú jednoducho rozdelené do odsekov pomocou . Aby ste nečistili „hlavný“ div od cudzích vecí, môžete nájsť všetky odseky (s Simple HTML DOM Parserom je to veľmi jednoduché) a spojiť ich obsah. Takže predtým, ako začnete pravidelne čistiť, zistite, či si vystačíte s trochou krvi.
Vo všeobecnosti medzi zástancami analýzy html kódu, založeného čisto na regulárnych výrazoch, a analýzy, ktorá je založená na analýze DOM štruktúry dokumentu, sa v sieti rozhoria skutočné holiwary. Tu napríklad na prepade. Na prvý pohľad nevinné
Overenie a spracovanie prichádzajúcich údajov je jednou z bežných úloh programovania. Jazyk PHP sa zvyčajne používa pre webové aplikácie, takže odstránenie značiek HTML z textu je tu najrelevantnejšie, pretože sú najviac náchylné na injekcie tretích strán. V tomto článku vám chcem pripomenúť staré stip_tags() a jeho triky, ako aj ponúknuť riešenia na odstránenie sekčných značiek HTML a niekoľko užitočných bonusov po tom.
Takže Naším hlavným nástrojom na odstraňovanie značiek HTML z textu je funkcia strip_tags(). Dávame jej reťazec value a odstráni z nej značky HTML a PHP, napríklad:
$s = "
Odsek.
Viac textu.";echo strip_tags($s);
Tento príklad vypíše riadok:
Odsek. Viac textu.
Tu je pozoruhodné, že funkcia má sekundu (nepovinné, ale užitočné) parameter, ktorého hodnotou je reťazec so zoznamom povolených značiek HTML, napríklad:
$s = "
Odsek.
Viac textu.";echo strip_tags($s, "
Tento príklad vypíše riadok:
Odsek.
Viac textu.
Podľa mňa veľmi pohodlné. To však nerieši jeden dôležitý problém - odstránenie značiek sekcií HTML, napríklad: script , noscript a style sú najčastejšie. Keď potrebujem odstrániť takéto značky sekcií, ako aj možnosti začínajúce na „< » и заканчивающиеся символом « >", používam nasledujúci kód PHP:
$p = pole(
"""si",
"""si",
"""si",
""<[\/\!]*?[^<>]*?>"si",
);
$r = pole(" "," "," "," ");
$s = preg_replace($p, $r, $s);
Tu premenná $p obsahuje pole regulárnych výrazov a $r je pole ich zodpovedajúcej náhrady (používam medzery). Zostáva iba nahradiť riadok a z textu odstránime odpadky HTML.
Je zrejmé, že vyššie uvedené dve riešenia je možné kombinovať. Na začiatku používam náhradu regulárnych výrazov a potom strip_tags() a získam vlastnú funkciu nohtml().
Na záver vám chcem ponúknuť niekoľko užitočných riešení. Takže v texte je lepšie nahradiť tabuľku medzerou, výsledok interpretácie oboch v prehliadači je rovnaký a bude menej problémov, napríklad:
$s = str_replace("\t", " ", $s);
Ak nepotrebujete zalomenie riadkov, môžete ich nahradiť aj medzerami, napríklad:
$s = str_replace(pole("\n", "\r"), " ", $s);
Nadbytočných medzier sa môžete zbaviť jednoduchým regulárnym výrazom, napríklad:
$s = preg_replace("/\s+/", " ", $s);
$s = trim($s); // nebude zbytočný
To je z mojej strany všetko. Ďakujem za tvoju pozornosť. Veľa štastia!
o 21:56 | Upraviť správu |
Zlaté čísla Ako predať krásne telefónne číslo
Ťažba kryptomeny: čo to je jednoduchými slovami
Najlepší operačný systém pre laptop: Kompletná recenzia
Programy na sťahovanie hudby od spolužiakov Stiahnite si smutnú pesničku od spolužiakov zo sociálnej siete
Mobilná verzia prehliadača Yandex