×
Creating solutions

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
No part of this article may be reproduced without mention of the author and URL to this website.
For more information, see the About section.

Comments

Article has no comments.

Add a comment

Name (required)
Website
Message (required)
Submit
From latest