×
Vytvárame riešenia

Zabudnutý apostrof spôsobuje nevalidný zápis dokumentu

Pri používaní skriptu, kde sa generuje markup, môžu neošetrené znaky spôsobiť nepredvídateľné a ťažšie identifikovateľné chyby programu. Jedným z týchto znakov je aj apostrof v prípade, ak má byť vytvorený markup s atribútmi a hodnotami.
Ak autor zabudne v hodnotách atribútov upraviť apostrof, naruší sa štruktúra elementu, ktorá podľa toho čo s ňou bude ďalej vykonávané, môže výrazne ovplyvniť chod programu. V tomto prípade nie je možné použiť escape sekvenčný zápis (spätnú lomku). Apostrofy sú navyše konvertované na úvodzovky.
Príklad: Hodnota atribútu title a'b'c obsahuje apostrofy
1
2
var fragment = "<span title='a'b'c'>apostrophe</span>";
document.getElementById("insert").innerHTML = fragment;
Výsledkom takto zapísaného kódu je:
1
<span title="a" b'c'="">apostrophe</span>
Pre zamedzenie tohto nežiaduceho efektu je potrebné použiť entitu &#39;. K dispozícii je aj entita &apos;, ktorá ale nie je podporovaná všetkými internetovými prehliadačmi.
Príklad: Nahradenie apostrofu za entitu &#39;
1
2
var f = "<span title='a&amp;amp;#39;b&amp;amp;#39;c'>apostrophe</span>";
document.getElementById("insert").innerHTML = f;
Reťazec a'b'c bol nahradený za reťazec a&#39;b&#39;c. Premenná f reprezentuje názov fragment. Skrátená bola len z dôvodu zápisu na jeden riadok pre účely zobrazenia. Pri tvorbe kódu je potrebné používať výstižné a zmysluplné názvym, teda fragment a nie f.
Oveľa jednoduchšie riešenie je držať sa pravidiel jazyka HTML a hodnoty atribútov zapisovať do úvodzoviek. Potom sa už stačí iba vyvarovať hodnotám, ktoré obsahujú úvodzovky. Úvodzovky v reťazcoch JavaScriptu je potrebné escapovať znakom \, keďže sa reťazce v JavaScripte vkladajú do úvodzoviek. Samozrejme je možné použiť aj apostrofy, záleží na coding style.
Príklad: Správny zápis markup-u v jazyku JavaScript.
1
2
var fragment = "<span title=\"a'b'c\">apostrophe</span>";
document.getElementById("insert").innerHTML = fragment;

Záver

Reťazce určené pre atribúty elementov je možné ošetriť cez metódu replace() alebo jej príbuzné funkcie podľa druhu programovacieho jazyka. V PHP je to napríklad metóda preg_replace(). Oveľa efektívnejšie je byť vždy konzistentný (držať sa pravidiel a zásad príslušného jazyka alebo dohodnutého coding style) a neuľahčovať si prácu sprehľadnením programového kódu čo môže neskôr spôsobovať chyby programu.
Autor: Matej Lednár
Dátum: 30.11.2012
Kategória: Programovanie
Značky: javascript, html, replace, preg_replace, php


Programovanie,JavaScript,HTML,replace,preg_replace,PHP
Žiadna časť tohto článku nesmie byť reprodukovaná bez uvedenia autora a URL na túto stránku.
Viac informácií nájdete v sekcii O projekte.

Komentáre

Článok neobsahuje zatiaľ žiadne komentáre.

Pridať komentár

Meno (povinné)
Web
Správa (povinné)
Odoslať
Od najnovších