dum | žák

Dynamický web

Název školy Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace
Adresa školky Kostelní 134, 411 08 Štětí
46773509
Název operačního programu OP Vzdělávání pro konkurenceschopnost
Registrační číslo CZ.1.07/1.5.00/34.1006
Označení vzdělávacího materiálu
Název tématické oblasti (sady) Programování
Název materiálu PHP - uvozovky
Anotace
Autor Jazyk
Očekávaný výstup
Klíčová slova
Druh výukového zdroje Věková skupina žáků
Typ interakce Ročník
Speciální vzdělávací potřeby žádné
Zhotoveno, (datum/období) Celková velikost

pdf icon
PHP - uvozovky

Obsah

Psaní uvozovek

Je třeba si uvědomit, že PHP je skriptovací jazyk, na jehož výstupu bývá zpravidla HTML kód, což je zase zcela jiný jazyk. Navíc se v PHP často používají SQL dotazy, které se mohou psát přímo v podobě SQL dotazů - a to je další, zcela jiný jazyk.

To už jsou 3 jazyky, které se míchají v jednom zdrojovém souboru. Je jasné, že každý jazyk má svou specifickou syntaxi, ke které používá uvozovky. No jo, jenomže jak pak dopadne např. tenhle řádek HTML kódu zapsaný v PHP?

    echo "<p class="par">Lorem ipsum</p>";

Jak by mohl dopadnout jinak, než:

     PHP Parse error:  syntax error, unexpected 'par' (T_STRING), expecting ',' or ';' in /home/mist/devel/php/tmp/www-root/chyba.php on line 3

Proč? Asi proto, že:

  • Příkaz echo vyžaduje uvozovky, do kterých se uzavírá řetězec.

  • Myslíte, že PHP tuší, že v uvozovkách příkazu echo je nějaký HTML kód? Netuší.

  • Přednost na uvozovky má ten jazyk, ve kterém skriptujeme, tj. PHP.

  • Pokud vnořujeme další jazyk (v příkladu HTML), pak má smůlu. Uvozovky, které HTML používá pro hodnoty atributů (v příkladu atribut class) není možné jen tak napsat, aniž by to neovlivnilo uvozovky PHP skriptu.

Jak tedy vyřešit problém výše? Našly by se tři způsoby:

  1. Provést tzv. escapování vnořených uvozovek, tj:

        echo "<p class=\"par\">Lorem ipsum</p>";
  2. Pro příkaz echo použít jednoduché uvozovky, čímž bude možné bez dalších komplikací vnořit uvozovky dvojité.

        echo '<p class="par">Lorem ipsum</p>';
  3. Pokud to situace dovolí, vynechat příkaz echo a zapsat kód čistě v HTML. Tzn. přerušit PHP skript, vypsat HTML a opět navázat otevřením PHP skriptu. V příkladu výše si to můžeme dovolit.

        ?>
        <p class="par">Lorem ipsum</p>
        <?php
            

Escapování znaků

Některé znaky v PHP mají speciální význam. Aby je bylo možné použít v místech (typicky řetězce), kde chceme význam potlačit, provede se jejich tzv. escapování. V některých případech je možné escapování obejít použitím jednoduchých uvozovek (vizte dále).

V příkladu výše jste mohli vidět, že jsme escapovali uvozovku uvnitř řetězce, abychom ji mohli použít jako skutečný symbol uvozovky, který by nám jinak předčasně řetězec uzavřel. Podobný příklad:

<?php
 
echo "Uvozovky \" uvnitř řetězce";

Jiný příklad pro escapování znaků lze ukázat např. u symbolu $, který se používá jako součást názvu proměnných.

<?php
 
$i = 15;
echo "číslo = $i";

Jako výsledek se zobrazí:

    číslo = 15

Pokud bychom ovšem z nějakého důvodu chtěli vypsat název proměnné $i (nikoli její hodnotu), pak si můžeme pomoci escapováním $.

<?php
 
echo "číslo = \$i";

Pak se zobrazí:

    číslo = $i

Jednoduché uvozovky

V PHP lze řetězce uzavírat do jednoduchý uvozovek, přičemž se na první pohled zdá, že to nemá na nic vliv. Pokud bychom použili příklady výše a zapsali je pomocí jednoduchých uvozovek, vypadal by zdrojový kód:

<?php
 
echo 'číslo = $i';
echo 'Uvozovky " uvnitř řetězce';
 

přičemž výsledek

    číslo = $i
    Uvozovky " uvnitř řetězce

Pro jednoduché uvozovky tedy platí, že bez problémů pohltí uvozovky dvojité a že se v nich nevyhodnocují proměnné. Z hlediska strojového času je použití jednoduchých uvozovek efektivnější.

Dvojité uvozovky

Dvojité uvozovky pro změnu pohltí uvozovky jednoduché. A na rozdíl od jednoduchých uvozovek se v nich proměnné vyhodnocují - jak jste mohli vidět v příkladech výše.

Cvičení

Příklad 1

Vypište příkazem echo následující text:

<div id="lorem" class="ipsum">Dolor si't amet</div>
řešení

Příklad 2

Do proměnné $q uložte následující SQL dotaz:

    SELECT `id`, `title` FROM `movies` WHERE `audio`='en' AND `resolution`='FULL HD'
řešení

Příklad 3

SQL dotaz z předchozího dotazu doplňte o proměnné $alang a $resol. Tzn., že na místo hodnot en a FULL HD dosadíte uvedené proměnné.

řešení