Php-paeta merkkejä. \\ "Ärsyttävä vino \\", kaltevuus, pakenevat lainausmerkit

(PHP 4, PHP 5, PHP 7)

addcslashes - Lainaa merkkijono viivoilla C-tyyliin

Kuvaus

addcslashes (merkkijono $ str , merkkijono $ charlist): merkkijono

Palauttaa merkkijonon alaviivoilla ennen merkkejä, jotka luetellaan charlist-parametrissa.

parametrit

Poistettava naru.

Charlist

Luettelo merkistä, jotka on poistettava. Jos charlist sisältää merkkejä \\ n, \\ r jne., ne muunnetaan C-kaltaisessa muodossa, kun taas muut ei-aakkosnumeeriset merkit, joiden ASCII-koodit ovat alle 32 ja korkeammat kuin 126, muunnetaan oktaaliesitykseksi.

Kun määrität merkkijonon charlist-argumentissa, varmista, että tiedät, mitkä merkit tulevat alueiden alkuun ja loppuun asettamasi merkkien välillä.

kaiun lisäysviivat ("foo", "A..z");
// lähtö: \\ f \\ o \\ o \\ [\\]
// Kaikki isot ja pienet kirjaimet poistetaan
// ... mutta niin tulee myös [\\] ^ _ `
?>

Lisäksi, jos alueen ensimmäisellä merkillä on korkeampi ASCII-arvo kuin alueen toisella merkillä, alueet eivät muodostu. Vain alku-, loppu- ja jaksomerkit vältetään. Käytä ord () funktio merkin ASCII-arvon löytämiseksi.

kaiun lisäysviivat ("eläintarha [". "]", "z..A");
// lähtö: \\ eläintarha ["\\."]
?>

Ole varovainen, jos päätät paeta merkkejä 0, a, b, f, n, r, t ja v. Ne muunnetaan arvoiksi \\ 0, \\ a, \\ b, \\ f, \\ n, \\ r, \\ t ja \\ v, jotka kaikki ovat ennalta määritettyjä paeta-sekvenssejä C: ssä. Monet näistä sekvensseistä on määritelty myös muissa C- johdetut kielet, mukaan lukien PHP, mikä tarkoittaa, että et ehkä saa haluttua tulosta, jos käytät addcslashes () koodin luomiseksi kielillä, joissa nämä merkit määritetään charlistissa.


Ensinnäkin vähän siitä, miksi näitä kaltevuuksia tarvitaan.
Jos korvaamme kyselyssä minkä tahansa tiedon, meidän on lainattava ne datan erottamiseksi SQL-komennoista.
Esimerkiksi jos kirjoitat
VALITSE * taulukosta, josta nimi \u003d lasku
sitten tukikohta päättää, että Bill on toisen kentän nimi, ei löydä sitä, ja antaa virheen. Siksi korvatut tiedot (tässä tapauksessa nimi Bill) on suljettava lainausmerkeissä - tietokanta pitää sitä merkkijonona, jonka arvo on osoitettava nimikenttään:
VALITSE * taulukosta WHERE name \u003d "Bill"
Lainaukset voivat kuitenkin esiintyä myös itse tiedossa. Esimerkiksi,
VALITSE * taulukosta WHERE name \u003d "D" Artagnan "
Täällä tietokanta päättää, että D on data, ja Artagnan on joukkue, jota hän ei tiedä, ja heittää myös virheen. Siksi kaikki tiedot on välähdyttävä selittämään pohjalle, että niissä olevat lainausmerkit (ja jotkut muut erikoismerkit) viittaavat tietoihin.
Seurauksena on, että saamme oikean pyynnön, joka ei aiheuta virheitä:
VALITSE * taulukosta WHERE name \u003d "D \\" Artagnan "

Siksi selvisimme, että korvaamalla tietoja kyselyssä olisi noudatettava kahta sääntöä:
- Kaikkien pyyntöön lisättyjen tietojen on oltava lainausmerkeissä (yksi tai kaksinkertainen, mutta yksi on kätevämpää ja useammin käytettyä).
- Kaikissa merkkimuuttujissa erikoismerkit on poistettava viivoilla.

Se on huomattava erityisesti: lisätyt viistot EI mene tietokantaan. Niitä tarvitaan vain pyynnössä. Kun osuma pohjaan, viistot hävitetään. Niinpä yleinen virhe on nauhojen käyttö haettaessa tietoja tietokannasta.

Työn lainaaminen, jos sivunumeroita ei ole saatavana

Jos julkaisupäivä on epävarma, käytä kysymysmerkkiä esimerkiksi päivämäärän jälkeen. tai smith Muita esimerkkejä epävarmoista päivämääristä ovat. Työtä, joka tarjosi kustantajalle, mutta ei ole vielä julkaisemisessa, esimerkiksi. julkaisuvaiheessa oleva työ, mutta esimerkiksi julkaisupäivä on epäselvä. Jos lähde ei sisällä sivunumeroita, kuten verkkosivua tai artikkeleita Internetissä, älä lisää sivunumeroa lainausmerkkeihin. Jos kappaleen numero ei tule näkyviin, ilmoita otsikko ja sitä seuraava kappaleen numero.

Itse asiassa kaikki yllä oleva koskee merkkijonotyyppitietoja ja päivämääriä. Numerot voidaan lisätä ilman vilkkuvaa ja ympäröimättä lainausmerkeillä. Jos teet niin, niin PAKOLLINEN! pakota tiedot haluttuun tyyppiin ennen lisäystä kyselyyn, esimerkiksi:
$ id \u003d intval ($ id);
Yksinkertaisuuden (ja luotettavuuden) vuoksi voit kuitenkin työskennellä myös numeroilla kuten merkkijonoilla (koska mysql muuntaa ne edelleen haluttuun tyyppiin). Tämän mukaisesti tyhjennämme kaikki pyyntöön lisätyt tiedot ja liitämme ne lainausmerkkeihin.

Joskus kirjoittaja kirjoittaa tutkimuksista, jotka joku on tehnyt, mutta et voi seurata alkuperäistä raporttia tai julkaisua. Koska et ole lukenut alkuperäistä raporttia, lisää tässä tapauksessa vain lähde, jota käytit linkkiluetteloon. Suluissa ”lainattu” sanat osoittavat, että et ole lukenut alkuperäistä tutkimusta.

Anna viiteluettelossa tietoja tosiasiallisesti käyttämästäsi artikkelista. Jotkut heistä juutuvat käsikirjoitukseen. Kaikkia tietoja edustavia elementtejä kutsutaan kuitenkin lausekkeiksi. Tässä on yksinkertainen esimerkki: Tämä on numeerinen lauseke, joka edustaa kokonaislukua.

Lisäksi on olemassa toinen sääntö - valinnainen, mutta sitä tulisi noudattaa virheiden välttämiseksi:
Kenttien ja taulukoiden nimet olisi suljettava käänteisissä yksittäisissä lainausmerkeissä - "" "(avain tällä symbolilla on tavanomaisella näppäimistöllä näppäimen" 1 "vasemmalla puolella) Loppujen lopuksi kentän nimi voi vastata mysql-avainsanoja, mutta jos käytämme takaosan tarjousta, MySQL kaikki on oikein:
VALITSE * PÖYTÄKIRJASTA `taulukosta` Missä` päivämäärä` \u003d" 2006-04-04 "
Sinun pitäisi tehdä ero lainausmerkeissä etkä saa sekoittaa toisiaan. On myös muistettava, että backtickeistä ei päästä kaltevuudella.

"Tämä on teksti ilman erikoismerkkejä." "Tämä on myös tekstiä, mutta erikoismerkeillä." Edellä meillä on kaksi lauseketta, jotka edustavat tekstiä. Niiden välillä on merkittävä ero. Lainauksia varten tulkki etsii muuttuvia puheluita. Lainausmerkeissä on muita muotoilukoodeja.

Kuten näette, funktion syntaksi on seuraava: funktion nimi. Jos toiminnolla ei ole parametreja, suluissa on tyhjä. Jos niitä on enemmän kuin yksi, erotamme ne pilkulla. Ja itse parametri ei ole muuta kuin ilmaus. Tämä on myös toiminto, joten voimme lisätä sen tekstiin pisteoperaattorilla.

Joten opimme kuinka korvata tiedot oikein pyynnössä.
MUTTA! Dynaaminen kyselykokoonpano ei rajoitu tietojen korvaamiseen. Usein meidän on korvattava SQL-komennot ja kentänimet kyselyssä. Ja tässä siirrymme jo turvallisuuteen:

SQL-injektio on hakkerihyökkäysmenetelmä, kun komentosarjaan siirrettyä tietoa muokataan siten, että tämän komentosarjan luoma kysely alkaa tehdä lainkaan sitä, mihin se oli tarkoitettu.
Suojaussäännöt tällaisilta hyökkäyksiltä voidaan jakaa kahteen kohtaan:
1. Työskentele tietojen kanssa.
2. Työskentele pyynnön ohjauselementtien kanssa.

Toinen matemaattinen termi on muuttuja, joka edustaa tuntematonta tietoa komentosarjaa kirjoitettaessa. Tämä on säilö, johon voimme lisätä tietoja komentosarjan aikana, muistaen ne tällä tavalla. Ilman muuttujia ei voi puhua minkäänlaisesta tietojenkäsittelystä, koska tietokoneella tulisi olla kyky sijoittaa laskutuloksia ja tallentaa tarvittavat tiedonsiirto-ohjelmat.

Jokaisella muuttujalla on oma yksilöllinen nimi, joka tunnistaa sen yksilöllisesti. Muut merkit voivat olla myös numeroita. Esimerkkejä kelvollisista muuttujien nimistä. Jos haluat antaa arvon muuttujalle, sinun on annettava lauseke \u003d operaattorilla. Vasemmalle, asetamme muuttujamme ja oikealle toisen lausekkeen, joka osoittaa lisätyn arvon. Näin se näyttää käytännössä.

Ensimmäinen kohta, jota tarkastelimme yksityiskohtaisesti yllä. Hän voi sanoa, että se ei oikeastaan \u200b\u200bole puolustus. Tietojen lisäämistä kyselyyn koskevien sääntöjen noudattaminen sanelee ensinnäkin SQL SYNTAX: n vaatimukset. Ja sivuvaikutuksena meillä on myös suoja hakkeroinnilta.

Toinen kohta on paljon monimutkaisempi, koska ei ole olemassa yhtä ainoaa yleistä sääntöä kuin tiedoista - takaosalainaus ei suojaa kentän nimeä hakkereiden tekemistä muutoksista. Lainausmerkkejä ei voi käyttää taulukkojen, SQL-lauseiden, LIMIT-komentoparametrien ja muiden lauseiden suojaamiseen.
Siksi perussääntö korvaamalla ohjauselementit kyselyssä on:
Jos haluat korvata kyselyssä dynaamisesti SQL-lauseet tai kenttien, tietokantojen ja taulukoiden nimet, älä lisää niitä suoraan kyselyyn missään olosuhteissa.
Kaikkien tällaisten lisäysten muunnelmia tulisi ADVANCED komentosarjoissasi ja valita käyttäjän kirjoittaman perusteella.
Esimerkiksi, jos joudut välittämään kentän nimen operaattoritilaukselle, et voi missään tapauksessa korvata sitä suoraan. Sinun on ensin tarkistettava se. Esimerkiksi tee taulukko kelvollisia arvoja ja korvaa pyynnössä vain, jos ohjattu parametri on läsnä tässä taulukossa:
$ tilaukset \u003d ryhmä ("nimi", "hinta", "määrä");
$ avain \u003d array_search ($ _GET ["sort"], $ tilaukset));
$ orderby \u003d $ tilaukset [$ avain];
$ kysely \u003d "SELECT * FROM` taulukosta`;
Tarkastelemme käyttäjän kirjoittaman sanan aiemmin kuvattuja vaihtoehtoja, ja jos löydämme, valitse sitten taulukon vastaava elementti. Jos vastaavuutta ei löydy, taulukon ensimmäinen elementti valitaan.
Siksi kysely ei korvata sitä, mitä käyttäjä kirjoitti, vaan se, joka kirjoitettiin komentosarjamme.
Kaikissa muissa tapauksissa on tehtävä sama.
Esimerkiksi, jos WHERE-käsky luodaan dynaamisesti:
if (! tyhjä ($ _ GET ["hinta"])) $ missä. \u003d "hinta \u003d" ". mysql_real_escape_string ($ _GET [" hinta "])." "";
$ kysely \u003d "SELECT * FROM` taulukosta` WHERE $ missä ";
Minun on vaikea kuvitella tapausta, jolloin taulukon nimi voidaan korvata kyselyssä dynaamisesti, mutta jos näin tapahtuu, nimi on myös lisättävä vain komentosarjan määräyksestä.
LIMIT-operaattorin parametrit tulisi pakottaa kokonaislukutyyppiin käyttämällä aritmeettisia toimintoja tai intval () -toimintoa.
Sinun ei pitäisi ajatella, että tässä luetellut esimerkit tyhjentävät kaikki kyselyiden dynaamisen kokoamisen vaihtoehdot. Sinun on vain ymmärrettävä periaate ja sovellettava sitä kaikissa tällaisissa tapauksissa.

Sitten käytimme sitä laskelmassa. Näin näimme yhden muuttujien sovelluksista. Tallensimme tuloksen yhteen ohjelman osaan, jotta voimme käyttää sitä toistuvasti toisessa paikassa turvautumatta funktioon joka kerta ja laskematta ilman satoja kertoja. Vaikka nykyisen ajan lataaminen ei ole aikaa vievä toimenpide, olemme vielä koulutuksen varhaisessa vaiheessa, ja meidän on huolehdittava esimerkkien yksinkertaisuudesta.

Niitä ei tarvitse laatia ollenkaan, ja tulkki ylläpitää asiaankuuluvia tietoja tietotyypistä. Tämä muuttuja luodaan käytettäessä skriptiä ensimmäistä kertaa. On monia tilanteita, joissa tämä käyttäytyminen on toivottavaa, mutta yleensä se voi vaikeuttaa työtä. Kuvittele tämä tilanne: Ohjelmoija voi kirjoittaa hyvin usein, ja joskus hän painaa kahta näppäintä väärään järjestykseen. Sana "teoria" ei ollut täällä sattumanvaraisesti.

Poista tarjoukset pakenevat

Voimme taivuttaa sitä tarpeidemme mukaan kiinnikkeiden avulla. Tässä on luettelo mielenkiintoisimmista operaattoreista, joilla pääset alkuun. Tämä skripti luo useita rivejä. Analysoi tehokkuutta. Sama periaate koskee operaattoria. Muuttuvien arvojen muokkaamisen helpottamiseksi muilla lukuilla kuin yhtenäisyydellä on luotu joukko operaattoreita, jotka yhdistävät tehtävät ja jonkin matemaattisen operaation.

Suluissa on annettava lauseke, joka ilmaisee taulukon hakemiston, jonka haluamme lukea. Nyt meillä saattaa olla houkutus kirjoittaa satunnainen käsikirjoitus. Taulukkoindeksien ei tarvitse olla numeerisia. Kyse on assosiatiivisista ryhmistä.

  • Yksi syy siihen, miksi sinun ei pitäisi luottaa "taikalainauksiin", on toinen. Hyvin epätodennäköistä, mutta silti. Itse asiassa ei kaksi direktiiviä vaan kolme viittaa taikulausekkeisiin. Kolmas on magic_quotes_sybase. Sen lisäksi, että se lisää lainausmerkin vinoviivan sijasta - niin se myös peruuttaa magic_quotes_gpc-toiminnon. Jos jollain ihmeellä molemmilla direktiiveillä on tila "päällä", niin jälkimmäinen ei toimi! Toisin sanoen, vedoten "maagisiin lainauksiin", tässä tapauksessa saamme kaikki väärin muodostettujen kyselyiden hurmat. Yleensä, puhtaasti teoreettisesti, on tarpeen ottaa huomioon tämän direktiivin olemassaolo, koska se on myös sellainen yllätys kuin ... lisälasien ja liuskalasien toimintojen käyttäytymisen muuttaminen! Jos magic_quotes_sybase \u003d käytössä, nämä toiminnot alkavat lisätä ja poistaa vastaavasti yhden tarjouksen viivan sijasta.
  • Kaikki yllä olevat esimerkit koskevat vain Mysql-tietokantaa. Kyselyjen laatimista koskevat erityissäännöt voivat poiketa muista DBMS-järjestelmistä, mutta yleinen periaate pysyy samana:
    • jos tietokannan tai kolmannen osapuolen kirjaston kanssa työskentelemistä varten tarkoitettu API tarjoaa erityistoiminnot kyselyjen laatimiseen, ja niitä on mahdollista käyttää, sinun on ensin käytettävä niitä.
    • jos tällaisia \u200b\u200btoimintoja ei ole, sinun tulisi etsiä dokumentaatiosta tämän DBMS-järjestelmän erityismerkkien seulontatoiminnot.
Huomaa: Lomakkeet
Kun tulostetaan arvo lomakkeiden syöttötunnisteissa, viistot eivät auta.
Jotta tällaisen kentän koko teksti voidaan näyttää, arvo on lisättävä lainausmerkkeihin, ja ulostulolle käytä htmlspecialchars () -toimintoa
Esimerkki:
echo htmlspecialchars ($ text, ENT_QUOTES)?\u003e
On myös huomattava (vaikka tämä ei ollenkaan liity lainausmerkkeihin ja viivoihin), että htmlspecialchars-toimintoa tulisi käyttää, kun selataan yleisesti kaikkea varmentamattomalta käyttäjältä saamaa tietoa. Miksi tämä pitäisi tehdä, voit lukea google-palvelusta pyynnöstä, mikä on XSS-haavoittuvuus
kirjoittanut phpfaq.ru

Hei rakkaat lukijat, haluaisin tänään keskustella php: stä, javascriptista ja sql: stä pakenevien tarjousten aiheesta, kertoa mikä se on ja miksi se on välttämätöntä. Annan myös hyödyllisiä esimerkkejä, jotka osoittavat paetamisen tarpeen.

Edellisessä artikkelissa käsitelty kaikuväite on tarkoitettu erityisesti tekstityksen tulostamiseen. Näitä merkkejä kutsutaan apostrofeiksi ja lainausmerkeiksi. Merkkien nimitaulukot ja. Jatkossa käytämme kahta ensimmäistä ratkaisua. Lisäämme, että yllä olevia merkkejä ei voi ”sekoittaa”. Apostrofilla alkava kirje on täytettävä merkinnällä ja lainausmerkinnän on oltava lainausmerkeissä.

Nämä ovat vääriä ohjeita. Tämä viittaa siihen, kuinka puhuimme lainausmerkeillä. Sitten sanallinen kysely sijoitetaan tekstiin seuraavasti. Pyynnön ansiosta voimme - ilman muutoksia - siirtyä muihin ohjelmistoihin.

Mikä on lainaukset pakenevat?

Antaaksesi määritelmän tälle käsitteelle annan ensin pienen esimerkin merkkijonojen ilmoittamisesta.

Lähes millä tahansa ohjelmointikielellä käytämme seuraavaa periaatetta merkkijonomuuttujan julistamisessa:
var text \u003d "Elämäblogin nimi";
Tulkki ymmärtää kaiken, mitä lainausmerkkien välissä on merkkijono.

Valkoisten merkkien sijoittaminen tulosteisiin

Valkoiset merkit näkyvät sinetissä, laitamme kirjoituksen. Selain näyttää sen samalla tavalla kuin koodi. Asiakirjoja on oikeastaan \u200b\u200bkolme. Joka on esitetty selaimessa seuraavasti.

Ero apostrofien ja lainausten välillä

Apostrofeilla ja lainausmerkeillä on hiukan erilainen vaikutus.

Lainaus, jota ympäröi lainausmerkit, voi sisältää erikoismerkkejä ja muuttujia. Muuttujien nimet korvataan niiden arvoilla. Sijoittamalla se lainausmerkkien ympäröimään riviin, rivi katkeaa. Lainausmerkeissä kaikki merkit tulkitaan kirjaimellisesti. Ei tulkintaa muuttujista tai erikoismerkeistä.

Jos joudumme siirtämään lainauksia sisältävän tekstin merkkijonomuuttujaan ja yritämme tehdä sen tällä tavalla:
var text \u003d "Blogini nimi:" elämä "";
silloin tapahtuu virhe, koska yhden rivin sijaan tulkki näkee kaksi:

"Blogini nimi:"
" "
ja heidän välilläan hänelle tuntematon operaattori - elämä.

Vältä lainausmerkit estääksesi tätä. Esimerkiksi javascriptissa se näyttää tältä:
var text \u003d "Blogini nimi: \\" elämä \\ "";
Tämän käytännön esimerkin jälkeen voit määritellä käsitteen pakenevat lainaukset.

Lainausmerkit, erikoismerkit

Jos teksti on rajattu apostrofeihin, apostrofia ei löydy kirjoituksesta. Seuraava esimerkki on väärä. Merkkijonon sisällä oleva apostrooppinen merkki on edeltävä alaviivalla. Selkänojan etuliitettä kutsutaan joskus lainausmerkiksi. Apostrofi on ainoa merkki, jonka meidän pitäisi lainata, jos tekstiä ympäröivät apostrofit. Muita merkkejä ei noteerata!

PHP pakenee

Lainausmerkeissä on kuitenkin määritettävä enemmän lainausmerkkejä. Erikoismerkit sellaisissa kirjoituksissa. Täydellinen taulukko erikoismerkkejä ja lainausmerkkejä taulukossa. Merkkitaulukko voidaan sulkea lainausmerkeissä. Lainausmerkkien käyttäminen lainausmerkeissä lainausmerkeillä on virhe.

Lainausmerkkien pakeneminen on toiminto, joka suoritetaan merkkijonomuuttujalle komentosarjan aikana. Tämän toiminnon avulla voit käyttää lainausmerkkejä merkkijonossa. Yksityinen, mutta melko yleinen tapa paeta on korvata alaviiva \\ sisäisten lainausmerkkien edessä.

Php lainaa pakenevansa

Php: ssä on useita tapoja paeta lainauksia, ensimmäinen niistä on samanlainen kuin yllä tarkasteltu.

"Miten menee?" Kysyi Ekaterina Ivanovna. "Ei mitään, elämme vähän", vastasi Startsev (Tšehhov)

Jos haluat näyttää sen sivulla, tee PHP: ssä jokin seuraavista tavoista.

Selkänoja pakenee:
echo "\\" Kuinka voit? \\ "- kysyi Ekaterina Ivanovna. \\" Ei mitään, elämme vähän \\ ", - vastasi Startsev (Tšehhov)";
Yksittäinen tarjous pakenee
kaiku "" Kuinka voit? "kysyi Ekaterina Ivanovna." Ei mitään, elämme vähän ", Startsev (Tšehhov) vastasi;"
Jos merkkijonon sisäiset lainausmerkit ovat paljon yksinkertaisempia, kun merkkijono julistetaan, käytä sen sisällä yksittäisiä ja kaksoislainauksia. Tai päinvastoin, riippuen siitä, onko tekstissä tiettyjä lainauksia.

Miksi käyttää PHP: stä pakenevia lainausmerkkejä?

Merkkijonoja sisältävän jäsentävän esimerkin lisäksi tietokannan kanssa työskennellessä tarvitaan usein pakenemaan lainausmerkkejä ja muita erikoismerkkejä.

Voit estää erilaisia \u200b\u200bongelmia tietokannan kanssa työskennellessäsi käyttämällä lisäysviiran toimintoa ennen tietojen tallentamista taulukoihin
$ str \u003d "Onko nimesi O" reilly? "; // output: Onko nimesi O \\" reilly? kaiun lisäysviivat ($ str);
tai mysql_real_escape_string

Nämä molemmat toiminnot ovat php: n vakiona ja pakenevat erikoismerkkijonoista. Milloin ja mitä käyttää, riippuu erityistehtävistä. Esimerkiksi lisäysviivoja käytetään parhaiten sarjoitettuun merkkijonoon kirjoitettaessa sitä tietokantaan, ja mysql_real_escape_string kaikille käyttäjätiedoille, jotka tulevat sivuston lomakkeesta.

Pienissä web-sovelluksissa et voi käyttää manuaalista pakenevaa lisäviivaa tai mysql_real_escape_string -vaihtoehtoa, jos otat Maagiset tarjoukset -ominaisuuden käyttöön - magic_quotes_gpc
if (! get_magic_quotes_gpc ()) (ini_set ('magic_quotes_gpc', 'on');)
Usein maagiset lainaukset ovat oletusarvoisesti käytössä palvelimella, tämä saadaan selville toiminnon suorituksen aikana saaduista tiedoista
echo phpinfo ();
javascript pakenevat tarjoukset

Hyvin usein, etenkin javascriptissa, sinun on työskenneltävä HTML-merkintöjä sisältävien merkkijonojen kanssa.

Javascriptissä lainaukset vältetään samalla tavalla, joko alaviivalla tai käyttämällä erityyppisiä lainauksia.
Selkänoja-esimerkki:
var html \u003d "

Estä vihreä teksti.

";
Esimerkki sisäisillä lainauksilla:
var html \u003d "

Estä vihreä teksti.

";
Kun HTML-merkinnällä varustettu rivi on liian pitkä ja vaatii rivinvaihdon, uudestaan \u200b\u200bpoistumistarve ilmenee, tässä tapauksessa ei enää lainata, vaan rivinvaihtomerkki
var html \u003d "

\\ Estä vihreällä tekstillä \\

";
Jos tässä esimerkissä et käytä alaviivaa ennen rivinvaihtoa, komentosarja ei toimi.

Varsin harvoin, mutta voit kohdata tehtävän siirtää HTML-merkinnät sarjoitetussa JSON-muodossa. Jos merkkijono sisältää yhdysmerkkejä, JSON-muotoa rikotaan.

Näiden ongelmien välttämiseksi sinun on suoritettava teksti rivinvaihdolla JSON.stringify () -toiminnon kautta
teksti \u003d JSON.stringify (teksti);
JSON.stringify () - saatavana vasta, kun jquery-kirjasto on kytketty.

Sql-pakenevat tarjoukset

Sql: ssä, pakenevilla lainausmerkeillä php: ssä ja js: ssä tutkittujen menetelmien lisäksi - alaviiva ja sisäiset lainausmerkit - on toinen ratkaisu.
VALITSE "Onko nimesi O" "reilly?";
Sinun on kopioitava sql: n lainausmerkkejä.

kirjoittamisen sijasta
kirjoittamisen sijasta

Poista tarjoukset pakenevat

Voit poistaa php: stä pakenevia lainausmerkkejä tavallisilla toimintoliuskoilla ();

Javascriptissa ei ole analogisia nauhaviivoja, mutta voimme käyttää säännöllistä lauseketta aina auttaaksemme poistamaan tarjouksia pakenevista javascriptista
korvaa (/ \\ 0 / g, "0"). korvaa (/\\\\(.)/ g, "$ 1")
Yritin tässä artikkelissa pohtia php: n, js: n, mysql: n pakenevien tarjousten aiheita ja osoittaa, missä tapauksissa on tarpeen käyttää pakenemista. Toivon, että tästä artikkelista on ollut apua.

2007.11.08 16:07

Edessä on ongelma lisätä lainauksia automaattisesti PHP: ssä, kun tietoja syötetään tietokantaan.

Pieniä seikkailun jälkeen Internetissä huomasin, että ongelma voidaan ratkaista muuttamalla palvelimen asetuksia .htaccess-direktiiveissä: magic_quotes_gpc ja magic_quotes_runtime.

He sanovat (ja uskon jopa tämän), että php-kielen kehittäjät, koska he eivät voineet pakottaa suurta osaa php-ohjelmoijista kirjoittamaan korkealaatuista koodia, päättivät huolehtia DBMS-järjestelmien turvallisuudesta ja ottivat käyttöön automaattisen viivojen lisäyksen erikoismerkkien eteen. Viivoja lisätään php.ini-ohjeiden perusteella (magic_quotes_gpc ja magic_quotes_runtime).

Direktiivejä kutsutaan yhdessä taikulainauksiksi. Kutsun niitä ”helvettilainauksiksi”. Hyvin kirjoitetussa sovelluksessa ei todellakaan tarvita automaattista lainausta: ylimääräiset lainaukset häiritsevät, ja ne on poistettava.

Ensimmäinen direktiivi - magic_quotes_gpc - tarkoittaa, että PHP lisää automaattisesti viipoja käyttäjän vastaanottamiin tietoihin - POST-, GET-pyynnöistä ja evästeistä. Toinen muuttuja - magic_quotes_runtime - tarkoittaa, että komentosarjan suorituksen aikana vastaanotettuihin tietoihin, esimerkiksi tiedostosta tai tietokannasta, lisätään viivaviivoja. Joten jotkut sellaista tietoa edustavat toiminnot suorittavat tarjouksensa.

Jos haluat kieltäytyä tällaisesta häiritsevästä palvelusta, joko sinä (siinä harvinaisessa ja iloisessa tilanteessa, kun olet palvelimen suvereeni omistaja) poistat nämä määritysmuuttujat php.ini-tiedostosta tai (jos et tietenkään isännöi sivustoa ilmaisella isännöinnillä). voit tehdä muutoksia .htaccess-tiedostoon. Tämä on tiedosto, jossa paikalliset sijaitsevat - yhdelle hakemistolle, ei koko palvelimelle - apache-asetukset. Ja lisää seuraavat rivit siihen.

Muistilappu: sivun adaptiivinen versio aktivoidaan, joka mukautuu automaattisesti selaimesi pieneen kokoon ja piilottaa joitain sivuston yksityiskohtia helpon lukemisen vuoksi. Hyvää katselua!

Olen iloinen voidessani toivottaa taas kaikki tervetulleiksi blogin sivuille, jotka on omistettu kaikille monimutkaisille sivuille onnistuneesta luomisesta ja mainostamisesta - paikka päällä! Tämän päivän PHP-oppitunnissa käsittelemme aiheita, kuten muuttujatyypit, pakenevat tekstit, erikoismerkit ja PHP: n heredoc-syntaksi.

Muuttujatyypit

PHP: ssä on kahdeksan erityyppistä muuttujaa, joista

4 skalaarityyppiä:

  • boolean (boolean tai boolean tyyppi)
  • kokonaisluku (kokonaislukuja)
  • kelluva (liukuluku)
  • merkkijono (merkkijono)

2 sekoitettua tyyppiä:

  • array (taulukko)
  • esine

2 erityistä tyyppiä:

  • resurssi

Ennen kuin tutkitaan kutakin tyyppiä yksityiskohtaisemmin, on syytä selventää, että PHP EI ole tiukasti kirjoitettu kieli, mutta kieli, jolla on dynaaminen tyypitys. Tämä tarkoittaa, että meidän ei tarvitse ilmoittaa kunkin muuttujan tyyppiä etukäteen (luotaessa). Itse PHP arvaa, minkä tyyppinen tämä tai tuo muuttuja on, perustuen siihen, mitä laitamme tähän muuttujaan. Tämä tarkoittaa myös, että toisin kuin kielet, joilla on tiukat tyypit, voimme ottaa ja asettaa merkkijonon muuttujaan kokonaisluvulla, ja tämä ei ole virhe! Tämä on yksi PHP: n ominaisuuksista, joka on erittäin suosittu ihmisille (aloittelijoille), jotka eivät ole aikaisemmin käsitelleet ohjelmointia. Pääsääntöisesti lopulta kaikki päätyvät siihen, että tämä on kielen miinus, ei plus.

Boolean (looginen) - yksinkertaisin tyyppi. Se voi ottaa vain 2 arvoa: totta tai väärä (totta tai vääriä), ne eivät ole kirjainkoolla (voit kirjoittaa TOSI, tosi jne.). Havainnollinen esimerkki:

echo $ name "
", $ name2;?\u003e

Tulos:

Kuten näette, selain ei ymmärrä boolean tyyppiä, toisin kuin PHP, joten kun yrität tulostaa totta tai väärä se näyttää sivulla olevan numeron 1 tai tyhjä rivi.

Kun muutetaan boolean-tyyppiseksi, seuraavia arvoja pidetään FALSE: na:

  • kokonaisluku 0 (nolla)
  • liukuluku 0.0 (nolla)
  • tyhjä merkkijono ja merkkijono "0" tai "0"
  • tyhjä ryhmä
  • erikoistyyppi NULL (mukaan lukien määrittelemättömät muuttujat)

Kaikkia muita arvoja käsitellään TODEna.

// desimaaliluku $ int \u003d -5; // negatiivinen numero $ int \u003d 05; // kahdeksannumero $ int \u003d 0x1A; // heksadesimaaliluku
// Liukulukujen numerot (todelliset): $ flt \u003d 1,4; $ flt \u003d 1,2e3; $ flt \u003d 7E-10; ?\u003e

Yleisesti käytettyä tyyppiä PHP: ssä voidaan kuitenkin harkita jouset. Merkkijonot voidaan kirjoittaa joko yksin- tai kaksinumeroisina lainausmerkeinä, mutta en koskaan suosittele kenenkään kirjoittamaan merkkijonoja kaksinumeroisina lainausmerkeinä, koska tällä tavalla pakotat PHP-tulkin “jäsentämään” merkkijonosi muuttujien suhteen siinä, joka, vaikkakin hieman, mutta hidastaa työtä. Vaikka haluat käyttää muuttujia merkkijonossasi, tämä voidaan tehdä käyttämällä yksittäisiä lainausmerkkejä + (liimaamalla kaksi tai useampia rivejä yhdeksi). Miksi sitten kaksoislainauksia tarvitaan yleensä? Esimerkiksi kun haluamme käyttää erikoismerkkejä (\\ n, \\ r jne.), Mutta niistä vähän myöhemmin.

On myös syytä huomata, että yksittäiset lainaukset + liittäminen tekee koodista paljon luettavamman kuin jos valitset valinnanvaraisesti kaiken lainausmerkeinä. Mutta tarpeeksi esipuhe, nyt sinä näet kaiken ja ymmärrät:

$ numero \u003d 2; // integer $ hand1 \u003d "Käsien lukumäärä henkilössä:"; // merkkijono + muuttujien jäsentäminen $ hand2 \u003d "Käsien lukumäärä henkilössä:"; // merkkijono
// lisää $ number -muuttuja näihin riveihin: $ hand1 \u003d "Määrä kädet, jotka henkilöllä on: $ numero ja enemmän tekstiä ..."; // ÄLÄ suosittele $ hand2 \u003d "Ihmisten käsien lukumäärä:". $ numero. "ja enemmän tekstiä ..."; // suosittele!
echo $ hand1, "
", $ hand2;?\u003e

Tulos:

Puhumme lisää ketjuttamisesta seuraavassa artikkelissa.

  • hänelle annettiin vakio Tyhjä.
  • hänelle ei ole vielä annettu arvoa.
  • hän poistettiin unset ()

Jäljellä olevien muuttujatyyppien tutkiminen tässä vaiheessa olisi turhaa. Tapaamme muita tyyppejä ja analysoimme niitä syvällisemmässä PHP-tutkimuksessa.

PHP pakenee

Mutta entä jos rivillämme emme halua saada muuttujan arvoa, vaan haluamme kirjoittaa kirjaimellisesti dollarinumeron? Tarkastellaan kahta vaihtoehtoa:

$ hand1 \u003d "Määrä kädet, joilla henkilöllä on: \\ $ numero ja enemmän tekstiä ..."; // ÄLÄ suosittele $ hand2 \u003d "Henkilön käsien lukumäärä: $ numero ja enemmän tekstiä ..."; // suosittele!
echo $ hand1, "
", $ hand2;?\u003e

Tulos:

Ensimmäisessä versiossa (kaksoislainausmerkeillä) käytimme erityisen dollarisymbolin karkaamista, jotta tämä erityinen symboli lakkasi käyttämästä erityistä tarkoitustaan \u200b\u200b(määrittelemässä muuttujia) ja muuttui tavalliseksi dollarimerkiksi.

Toisessa vaihtoehdossa (yksittäisillä lainausmerkeillä), kuten jo tiedät, PHP-tulkki ei edes yrittänyt löytää muuttujia merkkijonosta, joten karkaamista ei vaadittu.

Erikoismerkit PHP: ssä

Varsinkin blogin lukijoille paikka päällä! Valmistelin lyhyen luettelon erikoismerkeistä PHP-ohjelmointikielellä:

  • \\ n uusi rivi
  • kuljetuksen paluu
  • \\ vaaka-välilehti
  • \\\\ alaviiva (alaviiva)
  • \\ dollarin merkki
  • \\ "kaksinkertainen lainaus

Tarkastellaan erikoismerkkien työtä esimerkillä \\ n - erikoismerkki, joka tekee uuden rivin käännöksen (kuten Enter). Selaimet eivät kuitenkaan ymmärrä (ja ei pitäisi) sivuuttaa sitä, mutta sen työn tuloksen voit nähdä sivun lähdekoodissa:

echo $ -sääntö, "
", $ Rule2;?\u003e

Tulos:

Lähdekoodi (Ctrl + U):

Jos selaimen vierailijoille erikoismerkkiä \\ n ei näytetä lainkaan, mikä sen merkitys on?

Ensinnäkin, käyttämällä erikoismerkkejä ja \\ n, voit alustaa koodin kätevästi sivulla (kuten yllä olevassa esimerkissä).

Toiseksi, \\ n voidaan käyttää esimerkiksi kirjoitettaessa tiedostoon siirtääksesi (Enter) ja jatkaaksesi nauhoitusta uudelle riville.

Vaihtoehto tälle muotoilulle on.

PHP: n heredoc-syntaksi

Tulos:

Lähdekoodi (Ctrl + U):

Tulos puhuu puolestaan, nyt katsotaan kuinka kaikki toimii:

  • Rivi alkaa kolmella kulmakiinnikkeellä<<<, далее следует имя идентификатора.
  • Avatunnisteella (etiketillä) olevassa rivissä ei missään tapauksessa saa olla mitään muita merkkejä sen jälkeen, mukaan lukien välilyönti. Toisin sanoen heti otsikkomme jälkeen meidän on asetettava Enter ilman välilyöntiä heti Enter!

PHP: n jouset on kehystetty yhdellä tai kaksinkertaisella lainauksella. Tärkein ero on, että voit korvata muuttujan lainausmerkeissä:

Nyt voimme keksiä uuden ratkaisun ongelmaan oppitunnista Muuttujat PHP: ssä:

$ otsikko"; kaiku"

$ sisältöä
"; ?>

Kuinka PHP löytää muuttujan merkkijonosta?

Kaikki on yksinkertaista. Muista, mitä merkkejä voidaan käyttää muuttujan nimessä? Nämä ovat numeroita, kirjaimia ja alaviivoja _.

Tässä PHP ottaa nimeltä kaiken, mikä on $ -merkin ja ensimmäisen kielletyn merkin välillä.

Seuraavassa koodissa PHP määrittää muuttujan nimen virheellisesti ja aiheuttaa virheen:

Tulos selaimessa:

Huomaa: Määrittelemätön muuttuja: pricerub D: \\ OpenServer \\ domains \\ site \\ index.php rivillä 3

Jotta PHP voi oikein määrittää merkkijonossa olevan muuttujan nimen, sinun on laitettava se kiharoihin ():

Tulos selaimessa:

Rs. 1499

Ei ole yksiselitteistä mielipidettä siitä, mitä lainauksia tulisi käyttää tavallisille kielille, joissa mitään ei tarvitse korvata. Monet ohjelmoijat haluavat kuitenkin käyttää yksittäisiä lainauksia.

Tosiasia, että monet tuplalainaukset aiheuttavat yhdistyksen "jotain pitäisi korvata tällä rivillä". Siksi suosittelen yksittäisten lainausmerkkien käyttöä selkeässä tekstissä ja kaksinkertaisia \u200b\u200blainausmerkkejä vain, kun joudut korvaamaan muuttujan tekstissä. Esimerkki:

Paeta tarjouksia

Jos joudut laittamaan lainausmerkkejä merkkijonon sisään, voit tehdä sen kahdella tavalla:

Toisessa esimerkissä asteikko \\ poistuu sitä seuraavasta lainausmerkistä, jotta PHP käsittelee sitä merkkijonona.

Mitä sinun mielestäsi on tehtävä, jotta vain alaviiva näkyy? Loppujen lopuksi hän pakenee viimeistä tarjousta. Se on hauskaa, mutta sinun täytyy kirjoittaa toinen vinoviiva päästäksesi ensimmäisestä:

Tuplalainausmerkit ja rivinvaihdot

Tuplaviiva antaa sinun paeta lainausten ja itsesi lisäksi myös joitain muita merkkejä. Suosituimpia näistä ovat välilehdet (pitkä tila, jota saat, kun painat TAB) ja rivinvaihdot. Ne näyttävät seuraavalta:

Kirjoita komentosarja, joka:
1. Luo $ -tyyppisen muuttujan, jonka arvo on Peli.
2. Luo $ -muuttujan, jonka arvo on "World of Warcraft" (lainausmerkeillä).
3. Tulostaa molemmat muuttujat tunnisteen sisällä

. Muuttujien välillä on oltava välilyönti.