Php kuondoa vitambulisho vya html. PHP: jinsi ya kuondoa vitambulisho vya HTML kutoka kwa maandishi? Kuondoa lebo za html binafsi kutoka kwa maandishi

Kazi ya kuondoa vitambulisho vyote au tu fulani vya html kutoka kwa mfuatano mara nyingi hutokea pale ambapo ni muhimu kutoa fursa kwa mgeni yeyote wa ukurasa kuongeza taarifa mpya. Mfano unaojulikana zaidi utakuwa kitabu cha wageni au mfumo wa maoni kwenye tovuti. Maandishi yaliyoongezwa kwa njia hii yanaweza kuwa na vitambulisho vingi tofauti, vilivyoongezwa kwa bahati mbaya wakati wa kunakili maandishi au kwa makusudi ili kufanya ujumbe kwa namna fulani kuwa "asili sana". Inafaa pia kuzingatia majaribio hasidi ya kutambulisha msimbo hasidi kwenye tovuti katika lebo za hati au jaribio la kuharibu mpangilio wa ukurasa kwa vitambulisho visivyo vya lazima.

Katika hali zozote zilizo hapo juu, kuna haja ya kuifuta kutoka kwa lebo za html zisizo za lazima kabla ya kurekodi habari mpya.

Usafishaji kamili wa maandishi kutoka kwa lebo za html

Maneno ya kawaida hutumiwa mara nyingi kwa kazi hizo, lakini katika makala hii tutaangalia njia rahisi - kuondoa vitambulisho kwa kutumia strip_tags kazi ya PHP. Chaguo hili la kukokotoa huondoa tu vitambulisho kutoka kwa mfuatano ulioainishwa kwenye kigezo.

$str_in = "

Nakala yangu kutoka mbalimbali vitambulisho.

" ;
$str_out = strip_tags($str_in);
echo $str_out;

Kama matokeo ya usindikaji huu, tunapata kamba bila vitambulisho katika utofauti wa $str_out:

Maandishi yangu yenye vitambulisho mbalimbali.

* Ni muhimu kuzingatia kwamba kazi ya strip_tags huondoa tu vitambulisho vyenyewe, na kuacha yaliyomo kati ya vitambulisho vya kufungua na kufunga.

Kuondoa lebo za html binafsi kutoka kwa maandishi

Wakati mwingine unahitaji tu kuondoa vitambulisho fulani kutoka kwa kamba. Hapa pia tutatumia kazi ya strip_tags, lakini wakati huu tutabainisha vitambulisho vinavyohitaji kuhifadhiwa kama parameta ya pili (ya hiari).

Kwa mfano, wakati wa kusindika kamba, unahitaji tu kuacha viungo:

$str_in = "

Nakala yangu kutoka mbalimbali vitambulisho.

" ;
$str_out = strip_tags($str_in, " " );
echo $str_out;

Kama matokeo ya usindikaji huu katika utofauti wa $str_out tunapata:

Maandishi yangu yenye vitambulisho mbalimbali.

Kwa njia hii, lebo zote ambazo ni halali katika mfuatano zinaweza kubainishwa huku zingine zote zikiondolewa.


Nakala hii inajadili njia rahisi zaidi ya kufuta safu ya vitambulisho. Ninapozingatia chaguzi zingine, nitapanua juu ya nakala hii. Ningefurahi ikiwa unapendekeza chaguzi zako za kutatua tatizo hili katika maoni au kwa barua pepe.

JavaScript imezuiwa kwenye kivinjari chako. Tafadhali wezesha JavaScript kwa tovuti kufanya kazi!

strip_tags

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

strip_tags - Huondoa lebo za HTML na PHP kutoka kwa kamba Maelezo strip_tags (string str [, string allowable_tags])

Chaguo hili la kukokotoa hurejesha mfuatano na lebo za HTML na PHP zimeondolewa. Ili kuondoa vitambulisho, otomatiki inayofanana na ile inayotumika kwenye kitendakazi cha fgetss() hutumiwa.

Hoja ya hiari ya pili inaweza kutumika kubainisha lebo ambazo hazifai kuondolewa.

Kumbuka: Hoja ya allowable_tags iliongezwa katika PHP 3.0.13 na PHP 4.0b3. Kufikia PHP 4.3.0, maoni ya HTML pia yanaondolewa.

Tahadhari

Kwa kuwa strip_tags() haiangalii usahihi wa msimbo wa HTML, lebo ambazo hazijakamilika zinaweza kusababisha kuondolewa kwa maandishi ambayo si sehemu ya lebo.

Mfano 1. Mfano wa kutumia strip_tags() $text = "

Aya.

Maandishi zaidi kidogo"; echo strip_tags($text); mwangwi "\n\n-------\n"; // usifute

Echo strip_tags($text, "

"); // Ruhusu ,, echo strip_tags($text, " ");

Mfano huu utatoa:

Aya. Maandishi mengine zaidi -------

Aya.

Maandishi mengine zaidi

Tahadhari

Chaguo hili la kukokotoa halibadilishi sifa za lebo zilizobainishwa katika hoja ya allowable_tags, ikijumuisha mtindo na onmouseover.

Kufikia PHP 5.0.0, strip_tags() ni salama kuchakata data katika mfumo wa binary.

Kazi hii ina shida kubwa - inaunganisha maneno wakati wa kuondoa vitambulisho. Kwa kuongeza, chaguo la kukokotoa lina udhaifu. Kazi mbadala inayofanana na strip_tags:

Tazama pia maelezo ya kazi

Kwa kweli kila mtu anakabiliwa na kazi ya kusafisha HTML kutoka kwa vitambulisho visivyo vya lazima.

Jambo la kwanza linalokuja akilini ni kutumia strip_tags() php kazi:
strip_tags (string str [, string allowable_tags])

Chaguo za kukokotoa hurejesha mfuatano ulioondolewa tagi. Lebo ambazo hazihitaji kuondolewa hupitishwa kama hoja ya lebo zinazoruhusiwa. Kazi inafanya kazi, lakini, ili kuiweka kwa upole, haifai. Njiani, hakuna hundi ya uhalali wa msimbo, ambayo inaweza kuhusisha kufuta maandishi ambayo hayajajumuishwa kwenye vitambulisho.
Watengenezaji makini hawakukaa kimya - vitendaji vilivyoboreshwa vinaweza kupatikana mtandaoni. Mfano mzuri ni strip_tags_smart.

Kutumia au kutotumia suluhisho zilizotengenezwa tayari ni chaguo la kibinafsi la programu. Inatokea kwamba mara nyingi siitaji kidhibiti cha "zima" na ni rahisi zaidi kusafisha nambari na misemo ya kawaida.

Ni nini huamua uchaguzi wa njia moja au nyingine ya usindikaji?

1. Kutoka kwa nyenzo za chanzo na utata wa uchambuzi wake.
Ikiwa unahitaji kuchakata maandishi rahisi ya htmp, bila mpangilio wowote wa kupendeza, wazi kama siku :), basi unaweza kutumia vitendaji vya kawaida.
Ikiwa maandiko yana vipengele fulani vinavyotakiwa kuzingatiwa, basi washughulikiaji maalum wameandikwa. Wengine wanaweza kutumia tu str_replace . Kwa mfano:

$s = safu("’" => "'", // apostrofi ya kulia (km katika I"m)
"“" => """, // Alama ya hotuba ya ufunguzi
"–" => "—", // Mstari mrefu
"â€" => """, // Alama ya kufunga ya hotuba
"Ã " => "é", // e lafudhi ya papo hapo
sura (226) . chr(128) . chr(153) => "’", // apostrofi ya kulia tena
sura (226) . chr(128) . chr(147) => "—", // Dashi ndefu tena
sura (226) . chr(128) . chr(156) => "“", // Alama ya hotuba ya ufunguzi
sura (226) . chr(128) . chr(148) => "—", // M dashi tena
sura (226) . chr(128) => """, // Alama ya usemi ya kulia
sura ya (195) . chr(169) => "e", // e kali tena
);

foreach ($s as $needle => $badilisha)
{
$htmlText = str_replace($needle, $replace, $htmlText);
}

Nyingine zinaweza kutegemea usemi wa kawaida. Kwa mfano:

Fanya kazi getTextFromHTML($htmlText)
{
$search = safu (""]*?>.*?"si", // Ondoa javaScript
""]*?>.*?"si", // Ondoa mitindo
""]*?>.*?"si", // Ondoa lebo za xml
"""si", // Ondoa vitambulisho vya HTML
""([\r\n])[\s] "", // Ondoa nafasi
""&(quot|#34);"i", // Badilisha herufi maalum za HTML
""&(amp|#38);"i",
""&(lt|#60);"i",
""&(gt|#62);"i",
""&(nbsp|#160);"i",
""&(iexcl|#161);"i",
""&(senti|#162);"i",
""&(pound|#163);"i",
""&(nakala|#169);"i",
""(\d);"e"); // andika kama php

$replace = safu("",
"",
"",
"",
"\\1",
"\"",
"&",
"",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");

Return preg_replace($search, $replace, $htmlText);
}
(Kwa wakati kama huu, uwezo wa preg_replace kufanya kazi na safu kama vigezo unapendeza zaidi kuliko hapo awali). Ikiwa ni lazima, unaongeza safu na viwango vyako vya kawaida. Kwa mfano, mjenzi huyu wa kawaida wa usemi anaweza kukusaidia katika kuzitunga. Wasanidi wanaoanza wanaweza kupata makala "Yote kuhusu lebo za HTML. Maneno 9 ya Kawaida ya kuondoa lebo za HTML" kuwa muhimu. Angalia mifano hapo, chambua mantiki.

2. Kutoka kwa juzuu.
Kiasi kinahusiana moja kwa moja na ugumu wa uchambuzi (kutoka kwa aya iliyotangulia). Idadi kubwa ya maandishi huongeza uwezekano kwamba, wakati wa kujaribu kupanga na kusafisha kila kitu kwa njia ya kawaida, unaweza kukosa kitu. Katika kesi hii, njia ya kusafisha "hatua nyingi" inafaa. Hiyo ni, kuitakasa kwanza, kwa mfano, na kazi ya strip_tags_smart (hatuna kufuta msimbo wa chanzo, ikiwa tu). Kisha tunakagua kwa hiari idadi fulani ya matini ili kubainisha “kasoro”. Kweli, "tunasafisha" makosa na sheria za kawaida.

3. Kutoka kwa kile kinachopaswa kupatikana kama matokeo.
Algorithm ya usindikaji inaweza kurahisishwa kwa njia tofauti kulingana na hali. Kesi niliyoelezea katika moja ya nakala zangu zilizopita inaonyesha hii vizuri. Napenda kukukumbusha kwamba maandishi hayo yalikuwa katika div, ambayo, pamoja na hayo, pia kulikuwa na div na "breadcrumbs", tangazo la Adsense, na orodha ya makala sawa. Wakati wa kuchanganua sampuli ya makala, iligunduliwa kwamba makala hizo hazikuwa na picha na ziligawanywa tu katika aya kwa kutumia . Ili usisafishe div "kuu" kutoka kwa vitu vya nje, unaweza kupata aya zote (kwa Rahisi HTML DOM Parser hii ni rahisi sana) na uunganishe yaliyomo. Kwa hiyo kabla ya kufanya taratibu za kawaida za kusafisha, angalia ikiwa unaweza kuendelea na damu kidogo.

Kwa ujumla, kati ya wafuasi wa uchanganuzi wa msimbo wa HTML, kwa kuzingatia misemo ya kawaida, na uchanganuzi, ambao unategemea uchanganuzi wa muundo wa hati wa DOM, vita vya moto vya kweli vinawaka kwenye Mtandao. Kwa mfano, juu ya kufurika. Innocent mbele ya kwanza

Unapopokea data kutoka kwa watumiaji kupitia sawa , inaleta maana kuchakata data inayotumwa kutoka kwao na kupokea maandishi safi kama matokeo.

Nitakuambia sasa jinsi hii inaweza kufanywa kwa njia tofauti.

Jinsi ya kuondoa vitambulisho vyote vya HTML kutoka kwa kamba kwenye PHP?

Kuna kazi katika PHP inayoitwa "strip_tags". Inakuruhusu kuondoa vitambulisho vyote vya HTML kwa haraka na kwa urahisi kutoka kwa kibadilishaji.

Utekelezaji:

Katika kesi hii, tunahifadhi vitambulisho

NA . Lebo ambazo zina lebo ya kufunga hazihitaji kubainishwa wakati wa kuhifadhi.

Tafadhali kumbuka kuwa chaguo la kukokotoa haliangalii alama ya HTML kwa uhalali, na ikiwa kuna lebo ambazo hazijafungwa, basi una hatari ya kupoteza maandishi wazi.

Jinsi ya kuondoa vitambulisho vyote vya HTML kutoka kwa kamba kwenye JavaScript?

Tutaandika kazi yetu ndogo katika JavaScript, ambayo tutashughulikia data iliyopokelewa baadaye.

Utekelezaji:

kazi strip(html) ( var tmp = document.createElement("div"); tmp.innerHTML = html; rudisha tmp.textContent || tmp.innerText; ) var content = strip("Hujambo, dunia!");

Mfano huu unafanya kazi kwa kigezo maalum, lakini unaweza kuifanya upya ili kutoshea maudhui yaliyopokelewa, kwa mfano, kutoka kwa sehemu ya ingizo.