V sobotu 2. listopadu proběhla mohutná oslava naší plnoletosti !!
Multimediaexpo.cz je již 18 let na českém internetu !!
V tiskové zprávě k 18. narozeninám brzy najdete nové a zásadní informace.

Escapování

Z Multimediaexpo.cz

Verze z 1. 4. 2021, 10:22; Sysop (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

Escapování (výslovnost eskejpování) je slangový název pro metodu zápisu znaků se speciálním významem v textových řetězcích pomocí posloupností znaků začínajících vybraným, tak zvaným únikovým znakem (anglicky escape character), což dalo název této metodě.

Řetězcové literály se obvykle uzavírají do uvozovek nebo apostrofů, což přináší problém, jak vložit do řetězce znak, který slouží pro jeho ohraničení. Jednoduchým a často používaným řešením je zdvojení příslušného znaku.

Escapování je metoda, která se neomezuje pouze na vkládání znaků ohraničujících řetězec, ale umožňuje do řetězců vkládat také řídicí znaky, národní znaky, které by mohly způsobovat problémy při zobrazování, přenosu nebo konverzích textu, a jiné znaky se speciálním významem (tzv. metaznaky). Jako únikový znak se nejčastěji používá zpětné lomítko (\), které bylo použito v jazyce C, odkud bylo escapování převzato do dalších programovacích jazyků a jiných nástrojů.

Obsah

Způsoby escapování

Zpětná lomítka

Velký vliv na escapování v programovacích jazycích měl jazyk C, ve kterém se problematické znaky v řetězcích zapisují pomocí escape sekvencí začínajících znakem zpětného lomítka (\):

Posloupnost Slouží pro vložení znaku
\' Apostrof
\" Uvozovky
\\ Zpětné lomítko
\? Otazník
\n Nový řádek (line feed)
\r Návrat vozíku (carriage return)
\t Tabulátor (tab)
\v Vertikální tabulátor (vertical tab)
\f Nová stránka (form feed)
\a Zvonek (bell)
\b Backspace
\0nn Znak se zadaným kódem (v osmičkové soustavě)
\xHH Znak se zadaným kódem (v šestnáctkové soustavě)
\uHHHH Unicode znak U+HHHH

Toto escapování používá např. jazyk C/C++/C#, JavaScript, MySQL ale třeba i regulární výrazy.

Příklad (MySQL): <syntaxhighlight lang="SQL"> INSERT INTO produkty(id, nazev) VALUES(5, 'džíny Levi\'s'); </syntaxhighlight>

Příklad (C): <syntaxhighlight lang="Pascal"> char* cesta="C:\\Temp\\"; </syntaxhighlight>

Entity

Podrobnější informace naleznete na stránce: HTML entita

Metoda velmi podobná escapování je zápis entit v HTML a XML. Speciálním znakem, který uvádí posloupnost, jež má být interpretována odlišně, je znak ampersand (&); pro ukončení slouží středník (;). Mezi nimi je název entity nebo znak dvojité mřížky (#) a desítkový kód znaku (pro zápis znaku Euro lze použít &euro; nebo &#128;). Samotný ampersand se zapisuje &#38; nebo &amp;.

Jiné metody

Zdvojování

V některých jazycích se místo používání escape sekvencí uvozovky zdvojují. Tuto metodu používá např. BASIC, Sybase, Pascal, rc shell, CSV formát.

Příklad (Pascal): <syntaxhighlight lang="Pascal"> var obleceni: string; obleceni := 'džíny Levis'; </syntaxhighlight>

Příklad pro nalezení řetězce „100 %“ (pro MySQL, které používá % jako zástupný znak): <syntaxhighlight lang="SQL"> SELECT id FROM clanky WHERE nazev LIKE "100 %%" </syntaxhighlight>

Použití jiných omezovačů

Některé jazyky (Python, Tcl, Bourne shell) mají různé omezovače řetězcových literálů (někdy s poněkud odlišným významem); pokud má být v řetězci pouze jeden z omezovačů, lze pro ohraničení řetězce použít druhý.

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 ] nemohou být použity uvnitř názvu. MySQL si ve stejném případě umí poradit a zpětný apostrof (`) escapovat jeho zdvojením.

Další alternativy

  • přerušit řetězec v místě problematického znaku a vložit operátor nebo funkci, která vrací znak předaného kódu jako parametr (typicky nazývanou chr() nebo char()), operátor v Turbo Pascalu Writeln('Symboly '#27#24#25#26' jsou kurzorové šipky');
  • u jazyků, které řetězce umožňují uzavírat do jednoduchých i dvojitých uvozovek, lze použití jednoduchých a dvojitých uvozovek střídat, např. $s = '<a href="javascript:' . "alert('Ahoj, světe!')" . '">odkaz</a>';
  • 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.

Související články

Externí odkazy