Escapování
Escapování (/eskejpování/, z angl. escaping) je způsob kódování řetězcových literálů. Jedná se vlastně o surjekci znaků, které se v daném řetězci mohou vyskytovat do znaků, povolených v daném jazyku, a tzv. escape sekvencí.
V programovacích, skriptovacích, dotazovacích a dalších jazycích se řetězcové literály uvádějí většinou ve dvojitých, někdy též jednoduchých uvozovkách (aby se oddělily od ostatních lexikálních elementů jazyka). Pokud však uvozovky jsou samy o sobě součástí takového řetězce, syntaktický analyzátor by nedokázal rozlišit, kdy jde o uvozovku v řetězci a kdy o ukončení tohoto řetězce. Pro tento důvod existují tzv. escape sekvence.
Obsah |
Způsoby escapování [editovat]
Zpětná lomítka [editovat]
Jako nejčastější escape sekvence se používá konstrukce se znakem zpětného lomítka (\), které znamená escape sekvenci uvozuje a značí syntaktickému analyzátoru, že za ním následuje znak, popř. výraz, který je skutečnou další částí právě zjišťovaného řetězce.
Toto escapování používá např. jazyk C/C++/C#, JavaScript, MySQL ale třeba i regulární výrazy.
Příklad (MySQL):
INSERT INTO produkty(id, nazev) VALUES(5, 'džíny Levi\'s');
Příklad (C):
char* cesta="C:\\Temp\\";
Zdvojení [editovat]
Za druhou, méně častější escape sekvenci se dá považovat konstrukce se zdvojenými uvozovkami. Pokud se v daném jazyku (který tento typ escapování používá) má použít literální řetězec, ohraničený uvozovkami a obsahující tyto uvozovky v sobě, jsou tyto uvozovky v místě jejich výskytů uvnitř řetězce zdvojeny.
Toto escapování používá např. BASIC, Sybase, Pascal.
Příklad (Pascal):
var obleceni:string; obleceni:='džíny Levi''s';
Příklad pro nalezení řetězce „100 %“ (pro MySQL, které používá % jako zástupný znak):
SELECT id FROM clanky WHERE nazev LIKE "100 %%"
Entity [editovat]
- Podrobnější informace naleznete v článku HTML entita.
Způsob, který by se do escapování dal započítat, je použit v HTML (přestože obsah, který je subjektem escapování podle tohoto způsobu, většinou není řetězcový literál). Podobně jako u metody zpětných lomítek existuje speciální znak, který značí začátek escape sekvence. V HTML je to ampersand (&), za kterým následuje buď znak dvojité mřížky (#) a ASCII kód znaku nebo název tzv. entity, která v tomto případě slouží ke stejnému účelu, jen je lépe zapamatovatelná (například zápisy € a € jsou ekvivalentní). Kód znaku nebo název entity je ukončen středníkem. Samotný ampersand má pak zápis jako & nebo &.
Jiné metody [editovat]
Některé databázové systémy umožňují dát sloupcům v tabulkách identifikátor obsahující diakritické znaky ale i např. mezery a jiné znaky. Ty by však působily problém syntaktickému analyzátoru SQL. Databázová řešení si tedy do SQL přidaly pravidlo pro stanovení hranic identifikátorů databázových sloupců (použitelné i pro názvy tabulek):
- Příklad pro MS SQL:
SELECT [telefon do zaměstnání] FROM [zaměstnanci]; - Příklad pro MySQL:
SELECT `telefon do zaměstnání` FROM `zaměstnanci`;
U MS SQL ve výše uvedeném příkladu se technicky vzato nejedná o escapování v pravém slova smyslu, protože znaky '[' a ']' by v tomto případě uvnitř názvu nemohly být použity. MySQL si ve stejném případě umí poradit a zpětný apostrof (`) escapovat jeho zdvojením.
Alternativa k escapování [editovat]
- přerušit řetězec v místě problematického znaku a spojit ho s funkcí, která vrací znak předaného kódu jako parametr (typicky nazývanou
chr()nebochar()). - formátování řetězců přes funkce typu sscanf, sprintf apod.
- jedná-li se o výstup, jenž má být srozumitelný pro člověka, a není-li klíčové, aby znaky měly nutně totožný ASCII kód, pak (není-li jiná možnost) lze místo znaků se speciálním významem použít vizuálně podobný znak, např. intervalové závorky nahradit francouzskými jednoduchými uvozovkami ( ‹ › ), anglické uvozovky dvěma apostrofy, apod.