Karakterláncok kezelése

'09 nov 27. pé 17:30
Írta: kera

A karakterláncok kezelése és ellenőrzése egy igen fontos dolog főleg manapság mikor a felhasználóknak olyan weboldalakt adunk a kezébe ahol teljes dinamikusan működhetnek közre egy adott lap életében, hogy csak legáltalánosabbat említsük. Figyelnünk kell, hogy a felhasználók ne használhassanak HTML, JavaScript parancsokat, valóban E-mail címet adott-e meg.

Most néhány alapvető vizsgálatot és formázást mutatok be, szerencsére könnyű dolgunk van mivel a PHP bőségesen kínál függvényeket a karakterláncokhoz.

Fene a vegákba, szóval csapjunk a tatárbifsztekbe!
Kezdjünk a legalapvetőbb dolgokkal, felhasználó küldött egy formot, mondjuk $_POST-al.
Felejtsük el, hogy egyből felhasználjuk az átjött változókat, lehetőség szerint mindent ellenőrizzünk, sose bízzunk meg a látogatók által küldött adatokban.

Tehát jött mondjuk egy $_POST['szoveg'] változó. A felhasználónak ezt kötelező kitölteni, tehát nem lehet üres.
Változó ürességét az empty() függvénnyel ellenőrizhetjük:

<?php
if(empty($_POST['szoveg'])){
	echo "nem írtál szöveget!";
}
?>


Gondolom látszik, hogy az empty() akkor tér vissza igaz értékkel, ha a változó üres.
Tételezzük fel, hogy a felhasználó kitölti a mezőt, de csak egy karaktert ír, megpróbál átvágni a palánkon.
Meg kell határoznunk egy minimális szöveghosszt. Karakterláncok hosszának a vizsgálatára az strlen() függvény szolgál, mely visszaadja a karakterek számát (logikus :)).

<?php
if(strlen($_POST['szoveg']) < 30 ){
	echo "Legalább 30 karakternyi szöveget kell írnod!";
}
?>


Persze még itt is lehetnek gondok, simán rákönyököl az user pl az "a" betűre és már is ott a 30 karakter, de ha már ki akar szúrni velünk, idegesítsük még egy kicsit. Nézzük meg, hogy van-e a szövegben szóköz. Arra, hogy leellenőrizzük, hogy egy szövegben megtalálható egy adott karakter, vagy karakterlánc, szükségünk lesz az strstr() függvényre, melyben megadjuk a karakterláncokat, először amelyikben keresünk, majd azt amit keresünk. Ha megtalálható benne akkor igaz értékkel tér vissza. (Függvények, kifejezések elé tett felkiáltójellel úgymond tagadjuk, megfordítjuk az állítást, tehát itt akkor tér vissza igaz értékkel ha nem található meg benne.)

<?php
if(!strstr($_POST['szoveg']," ")){
	echo "Legalább egy teljes mondatot írj!";
}
?>

!!!javítva!!!

Ezt használhatjuk például E-mail címek ellenőrzésére is, van-e benne kukac és pont.
Nagyjából a fontosabb ellenőrzések megvannak, most kicsit variálunk a szöveggel.
Ha a felhasználó elkezd HTML kódokat beírogatni például egy fórumba, akkor azt az oldalon mikor kiíratjuk a böngésző ugyan úgy fogja értelmezni mintha az oldal része lenne, tehát lefuttatja, akár JavaScript parancsokat is. Ez nem a legszerencsésebb. Használjuk a htmlspecialchars() függvényt, mely az összes HTML tegek lecseréli olyan formára melyet a böngésző nem fordít le, hanem szövegként megjelenít.

<?php
echo htmlspecialchars("<script>alert(1);</script>");
?>


Ennek a következő lesz az eredménye: &lt;script&gt;alert(1);&lt;/script&gt;
Számunkra ez elég zagyva, de a böngésző ezt átalakítja olvasható formára és nem fordítja le mint JS kódot
Mi ezt fogjuk látni: <script>alert(1);</script>
ahelyett, hogy a böngésző feldobna egy alert ablakot.

Egy másik fontos dolog a sortörés. Amikor egy szövegdobozba (textarea) írunk és entert ütünk, azaz sortörést teszünk
és ezt elküldjük, akkor hiába íratjuk ki a változó tartalmát, mert a sortöréseknek nyoma sem lesz.
Ez azért van mert a textareába csapkodott enter végül is "\r\n" karaktereket szúr be, melyet a böngésző a megjelenítésnél nem alkalmaz. Neki a <br \> HTML kód kell. Itt jön képbe az nl2br() függvény, mely végeredményben a sortörések helyére beilleszti nekünk a szükséges br tegeket.

<?php
echo nl2br($hosszuszovegsorteressel);
?>


Ugorjunk egy kicsit másfelé. Van mondjuk egy fórumunk és nem szeretnénk, ha bárki is beírná a bugyi szót, de feltartani sem szeretnénk a felhasználót hibaüzenetekkel, így hát kicsillagozzuk a nem kívánt tartalmat.
Előszedjük az str_replace() függvényt, mellyel karakterláncokat cserélhetünk ki egy karakterláncban.
Paraméterei sorban; mit, mire, miben.

<?php
$szoveg = "Nem a bugyi a legjobb dolog a világon, de nagyon közel van hozzá!";
echo str_replace("bugyi","*****",$szoveg);
?>


Ennek az eredménye: Nem a ***** a legjobb dolog a világon, de nagyon közel van hozzá!
Most egy adott szövegrészt szeretnénk kivágni a sztringből, maradva az előző szövegnél
a hetedik karaktertől szeretnék visszakapni öt karaktert. A substr() függvényt fogjuk használni.
Paraméterei: egy karakterlánc, a vágás kezdeti pozíciója. Itt figyeljünk oda, mert a számolás nem 1-től, hanem nullától indul, így az első karakter pozíciója nulla. A harmadik paraméter pedig a vágás hossza, vagyis, hogy hány karaktert akarunk visszakapni.

<?php
$szoveg = "Nem a bugyi a legjobb dolog a világon, de nagyon közel van hozzá!";
echo substr($szoveg,6,5);
?>


Eredménye a bugyi :)
A substr értéke lehet negatív is és a harmadik paraméter is elhagyható, ilyenkor a kezdeti értéktől a string végéig adja vissza a levágott részt.

<?php
substr("bugyi",1); //ugyi
substr("bugyi",1,2); //ug
substr("bugyi",-1); //i
substr("bugyi",0,-2); //bug
?>


Mára ennyi, a fontosabb ellenőrzéseket és formázásokat átbeszéltük, egy alapvető űrlapot már képesek vagyunk leellenőrizni. Jó munkát hozzá!

Kommentek

Hozzászóláshoz be kell jelentkezned! Ha még nem lennél regisztrálva itt megteheted.


Ehhez a cikkhez még nem írtak kommentet!
RSS
Összes hozzászólás: 1162, naponta átlag 4.12. Regisztrált felhasználók: 47
Utolsó 5 regisztrált felhasználó: misike7070, Kislakki, hunprobalazs, Dr_NiGGa, örökzöld
Copyright © 2009 tutorialok.hu - Tutorialok, segédletek sok kategóriában - Adatvédelmi nyilatkozat | Kapcsolat | Átváltom.com