Tutorials

correct quoten

Ik zie dat er nogal eens wat onduidelijkheid is over het gebruik van quotes - een verwijsmiddel hoe het wel moet

Pagina 1

Inleiding

Taal is er om te communiceren. Met taal breng je een boodschap over naar een ander, en om dit goed te kunnen doen, zijn er regels bedacht voor deze taal. Dit is de grammatica.

Een programmeertaal, is net als andere talen, een middel om een boodschap over te brengen, in dit geval naar de server of de browser. Ook hier zijn regels bedacht om de boodschap helder en duidelijk over te brengen, dit is de syntax.

Nu over quotes. In de geschreven Nederlandse taal is het tegenwoordig niet duidelijk wanneer men enkele of dubbele quotes dient te gebruiken. Vroeger was dat iets anders: je gebruikte dubbele om iets letterlijk te citeren, en enkele voor de rest. Tegenwoordig wordt aangeraden om overal enkele quotes te gebruiken, maar er is geen verplichting.

Zo is het ook in een programmeertaal. Vaak zijn er geen regels voor dubbele of enkele qoutes. Wat hieronder staat is dus geen verplichting, maar wel een sterke aanrader. Het komt de leesbaarheid ten goede, en een consequent gebruik leidt uiteindelijk tot betere code. Ik laat zien hoe je quotes het beste kunt gebruiken in html, php en mysql. Velen zullen de inhoud van deze tutorial al kennen, maar voor beginnende programmeurs is het wel handig om eens door te lezen.
Pagina 2

Variabelen buiten quotes

Ten eerste haal je altijd de variabelen buiten quotes. Dit is echt een regel, maar ik vernoem het toch maar even.
Het volgende is fout:
<?php
$bar = 'bar';
echo 'foo $bar';
?>

Dat moet op de volgende manier:
<?php
$bar = 'bar';
echo 'foo ' . $bar;
?>

De variabele wordt buiten de quotes gehaald, maar wordt toch geëchot door het met een punt aan de string te koppelen. Dit is een belangrijk iets, en je mag er nooit van afwijken!
Pagina 3

Het verschil

Wat is ten eerste het verschil tussen enkele en dubbele quotes? Op het eerste gezicht lijken ze hetzelfde te doen, je kunt met alletwee strings gebruiken. Het verschil zit hem in het parsen.

Wanneer een tekenreeks (een string) geëchot wordt door php, wordt dat geparsed. Dat klinkt moeilijk, maar het komt er in feite op neer dat tekenreeks bekeken wordt of er speciale karakters inzitten, variabelen etc. Hier kan de computer wat mee, nu weet die precies wat die neer moet zetten.

Bij dubbele quotes wordt de volledige inhoud geparsed. Bekijk het volgende eens:
<?php
$hai = "hallo";
echo "$hai wereld";
?>
Dit wordt het volgende:
hallo wereld
Zoals je ziet wordt de variabele eerst vervangen door de inhoud voor het naar het scherm wordt weggeschreven.

Bekijk dit dan eens:
<?php
$hai = 'hallo';
echo '$hai wereld';
?>
Dit wordt dan het volgende:
$hai wereld
Dit is exact wat er tussen de enkele quotes staat! Het lijkt wel alsof er helemaal niets geparsed wordt. Dit is dan ook het verschil tussen de enkele en dubbele quotes. Bij de dubbele wordt er geparsed en bij de enkele niet. (althans, dat lijkt zo. Er wordt wel geparsed, alleen niets vervangen)
Pagina 4

Quotes in html

Wanneer gebruik je nu welke quotes? In html gebruik je altijd dubbele quotes. Als je een input veld hebt, doe je dat zo:

    <input name="naam" type="text">

En niet zo:

    <input name = 'naam' type = 'text'>

Conclusie: in html gebruik je altijd dubbele quotes. Dit is gewoon bepaald, je gebruikt altijd dubbele quotes in html.

Ps let ook op de spaties in het foute voorbeeld, om een = gebruik je geen spaties in html.
Pagina 5

Quotes in php

In php gebruik je dan enkele quotes. Zo dus:
<?php
$bar = 'bar';
echo 'foo ' . $bar;
?>

En niet zo:
<?php
$bar = "bar";
echo "foo " . $bar;
?>

Waarom niet? Twee redenen:
-Als je dubbele quotes gebruikt, kun je variabelen binnen de quotes opnemen. Bij enkele quotes kan dat niet. Bij het gebruik van enkele quotes leer je jezelf ook aan om de variabelen buiten de quotes te halen.
-Je hoeft minder te escapen. Stel je wilt een link opnemen in php, dus met html tags:
<?php
echo "<a href=\"php.net\">php net</a>";
?>

Makkelijker is dit:
<?php
echo '<a href="php.net">php net</a>';
?>

In html worden altijd dubbele quotes gebruikt. Omdat je alleen de quotes hoeft te escapen die gelijk zijn aan je beginquotes (als je begint met enkele hoef je geen dubbele te escapen), begin je in php zo veel mogelijk met enkele quotes.
Pagina 6

Uitzondering 1 - mysql

Dan zijn er nog uitzondering, de eerste: een mysql-query in php. Omdat je alleen de quotes hoeft te escapen waarmee je begint, zou je in mysql continue aan het escapen zijn. In mysql ben je verplicht enkele quotes te gebruiken, dubbele komen niet voor. Het levert zelfs een hoop ongemak op als je dit met enkele quotes doet, zelfs grote fouten. (voor een tutorial over mysql-injectie, zie hier eentje van Roel van de Water)
We hebben de volgende query:
<?php
'SELECT naam, leeftijd
FROM leerlingen
WHERE naam = '' . mysql_real_escape_string($_POST['naam']) . ''';
?>

Dit levert een grote fout op! Omdat we variabelen buiten qoutes halen, sluiten we de string af, en voegen met de . een variabele toe, en vervolgens openen we weer. Alleen hier krijgt naam een lege string, en gaat dit . mysql_real_escape_string($_POST['naam']) . ''' vervolgens verder als SQL commando’s. dat gaat niet werken. zo moet het wel:
<?php
"SELECT naam, leeftijd
FROM leerlingen
WHERE naam = '" . mysql_real_escape_string($_POST['naam']) . "'";
?>

Dit gaat wel werken, er worden andere quotes gebruikt dan de SQL syntax.

Nou, dat was dan mijn column over het gebruik van quotes. Onthoudt: je bent helemaal vrij om zelf te weten wat je doet, maar het is een sterke aanrader om dit zo te doen. Het verbetert de leesbaarheid, en er komen minder snel fouten in.
Pagina 7

Uitzondering 2 - escaped characters

Nog een uitzondering zijn de escaped characters (zie de link voor alle karakters)

Deze karakters worden gebruikt om bepaalde dingen te laten gebeuren met je string. Wil je een volgende regel (bijvoorbeeld in een mail, je kan niet op de enter drukken, dat ziet php niet, je moet dus de newline (\n) toevoegen)

wannneer je nu dit doet:
<?php
echo 'regel 1 \n regel 2';
?>
zal er (bijvoorbeeld in een mail) het volgende staan:
'regel 1 \n regel 2'
Dit komt omdat er dus niet geparsed wordt. Het wordt exact zo weggeschreven.

Dit zal je dan dus zo moeten doen:
<?php
echo "regel 1 \n regel 2";
?>
dit zal er dan zo uitzien:
regel 1
regel 2
Hier wordt er dus wel geparsed. En dat is wat je hier wil.
Pagina 8

Nawoord

Nou, dat was dan mijn tutorial over het gebruik van quotes. Onthoudt: je bent helemaal vrij om zelf te weten wat je doet, maar het is een sterke aanrader om dit zo te doen. Het verbetert de leesbaarheid, en er komen minder snel fouten in.

dit is een stappenplan voor welke quotes je gebruikt: (met dank aan Wouter J)

Regels voor quotes in PHP:
- PHP zoveel mogelijk met enkele quotes(')
- Zodra er in een string enkele quotes staan buiten de string dubbele, zo hoef je niet te escapen
- Zodra er in een string dubbele quotes staan buiten de string enkele.
- Zodra je gebruik maakt van \n of een van de andere escaped characters gebruik je dubbele (") quotes.

En hieruit kun je afleiden:
- Met een query altijd dubbele (aangezien je enkele erin gebruikt)
- Met HTML altijd enkele, aangezien de aanbevolen quotes in HTML dubbel zijn.


Jeroen


Bronnen:
quotes in taal
voordeel/nadeel quotes

Reacties

0
Nog geen reacties.