Vienas dalykas, kuris man nepatinka , kad beveik kiekvieną dalyką galima realizuoti mažiausiai dviem skirtingais būdais. Todėl nuolat kyla klausimas, o kuris geresnis? Kuris būdas teisingas? Nusprendžiau išbandyti keletą funkcijų ir pateikti jums rezultatus. Jokių apibendrinimų aš nedarysiu, tikiuosi tai padarysite jūs straipsnio komentaruose.

Eksperimentui pasirašiau nedidelę HTML formą, kuri perduoda duomenis $_POST metodu tolesniam apdorojimui.
Eksperimentinė eilutė:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

Eilutė paimama POST metodu
kodas:

echo $sometring=$_POST["nick"];

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

htmlentities vs htmlspecialchars

Šios funkcijos naudojamos, kad specialūs kintamieji būtų paversti į HTML objektus.

kodas:

echo htmlentities($sometring);

rezultatas:

""abc'ABC'123����įšųū!@#$%^&*()-+=_~"

kodas:

echo htmlentities($sometring,ENT_COMPAT,'UTF-8');

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlentities($sometring,ENT_QUOTES,'UTF-8');

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlentities($sometring,ENT_NOQUOTES,'UTF-8');

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlentities($sometring,ENT_NOQUOTES,'UTF-8', true);

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlentities($sometring,ENT_NOQUOTES,'UTF-8', false);

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

Išbandžiau visus htmlentities funkcijos variantus, dabar analogiškus veiksmus atliksiu su htmlspecialchars

kodas:

echo htmlspecialchars($sometring);

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlspecialchars($sometring,ENT_COMPAT,'UTF-8');

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlspecialchars($sometring,ENT_QUOTES,'UTF-8');

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlspecialchars($sometring,ENT_NOQUOTES,'UTF-8');

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlspecialchars($sometring,ENT_QUOTES,'UTF-8', true);

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

echo htmlspecialchars($sometring,ENT_QUOTES,'UTF-8', false);

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

Kai vieną iš šitų funkcijų rašote be papildomų parametrų standartiškai laikoma, jog tai yra ENT_COMPAT

mysql_escape_string vs mysql_real_escape_string vs addslashes

Kaip galite pamatyti iš pavadinimo šios funkcijos skirtos darbui su mysql užklausos duomenimis.

kodas:

echo mysql_escape_string($sometring);

rezultatas:

\"\"abc\'ABC\'123ąčęėįšųū!@#$%^&*()-+=_~\"

kodas:

echo mysql_real_escape_string($sometring);

rezultatas:

\"\"abc\'ABC\'123ąčęėįšųū!@#$%^&*()-+=_~\"

Šiuo atveju viskas lengvai išsprendžiama, nes mysql_escape_string yra deprecated, tai reiškia, kad ji pasenusi ir naudoti nerekomenduojama. Abejoms funkcijoms reikalingas mysql prisijungimas, tačiau viską galima padaryti ir kitaip.
kodas:

echo addslashes($sometring);

rezultatas:

\"\"abc\'ABC\'123ąčęėįšųū!@#$%^&*()-+=_~\"

Pasiskaitymui
addslashes() Versus mysql_real_escape_string()
mysql_real_escape_string() versus Prepared Statements

escape vs encodeURIComponent

Šį kartą paskutinis eksperimentas - javascript. Todėl ankstesnį kodą teko truputėlį patobulinti.

kodas:

document.getElementById('ajaxTest1').innerHTML = nick;

rezultatas:

""abc'ABC'123ąčęėįšųū!@#$%^&*()-+=_~"

kodas:

document.getElementById('ajaxTest2').innerHTML =escape(nick);

rezultatas:

%22%22abc%27ABC%27123%u0105%u010D%u0119%u0117%u012F%u0161%u0173%u016B%21@%23%24%25%5E%26*%28%29-+%3D_%7E%22

kodas:

document.getElementById('ajaxTest3').innerHTML =encodeURIComponent(nick);

rezultatas:

%22%22abc'ABC'123%C4%85%C4%8D%C4%99%C4%97%C4%AF%C5%A1%C5%B3%C5%AB!%40%23%24%25%5E%26*()-%2B%3D_~%22

Pasiskaitymui:
javascript escape vs encodeURIComponent
Handling UTF-8 in JavaScript, PHP, and Non-UTF8 Databases
what characters are missing when you use escape() or encodeURI() ?

Taigi gerbiamieji laikas daryti išvadas, kokios jos?

Panašūs straipsniai


“Eksperimentas. Keletos funkcijų bandymai” komentarų: 8

  1. Eimantas

    Šiaip čia ne straipsnis. Įdomu kodėl suvėlęs tokią krūvą kodo, minimaliai teksto ir neparašęs savo išvadų bandai jas išspausti iš kitų.

    Gal pats nesupranti kam to reikia?

  2. Invisible

    Tiesiog pastebėjimas. Jei nepatinka pasirinkimo laisvė, tai manau perl’as tau išvis nepatiktu ;)


  3. Tam kad padarisi išvadas apie šias funkcijas tereikia paskaititi ju manualus.

  4. Aurimas

    Manau, kad čia autorius ir pats turėtų pabandyti šiokias tokias išvadas padaryti.
    Ypač, jei skaitytojas ne expertas, ir jam čia tik 30 viena nuo kitos per daug nesiskiriančių eilučių ;)

  5. care

    jėga :)

  6. Emilis

    Prisijungsiu prie burbančių komentotorų :-)

    Vietoj viso to viduriavimo žodžiais užtektų padaryti lentelę:

    +———-+—————–+
    | | original_string |
    +———-+—————–+
    | f1(a, b) | modified_string |
    | f1(a, c) | mod_str_2 |

    +———-+—————–+

    Tada būtų kokios nors naudos. Dabar tik dar vienas “tualetinio popieriaus gabalėlis” (c) pukomuko.


  7. Įdomu ar yra kokia kalba, kur įmanoma kaž-ką atlikti tik vienų budu? Ir atsirastu tada toks supratimas, kaip algoritmo efektivumas? Ir kuo tas pastebejimas surištas su šio straipsniu.

  8. Mindaugas

    Pastebėjimas: šios funkcijos nėra visiškai identiškos - tam tikrais atvejais jų rezultatai skiriasi, todėl vienareikšmiško atsakymo ieškoti ir nereikia.

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.