Escapování

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledá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.

Způsoby escapování[editovat | editovat zdroj]

Zpětná lomítka[editovat | editovat zdroj]

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 | editovat zdroj]

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 | editovat zdroj]

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 | editovat zdroj]

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 | editovat zdroj]

  • 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() nebo char()).
  • 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.

Externí odkazy[editovat | editovat zdroj]