correct quoten

Door Jeroen VD, 15 jaar geleden, 18.787x bekeken

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

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. Variabelen buiten quotes
  3. Het verschil
  4. Quotes in html
  5. Quotes in php
  6. Uitzondering 1 - mysql
  7. Uitzondering 2 - escaped characters
  8. Nawoord

 

Er zijn 23 reacties op 'Correct quoten'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Wouter J
Wouter J
15 jaar geleden
 
0 +1 -0 -1
Kun je dit misschien over meerdere hoofdstukken verdelen en deze hoofdstukken een aparte pagina geven? Dat maakt het allemaal wat leesbaarder.

En even voor het overzicht een stappenplan dat ik een keer heb gepost:
Quote:
Regels voor quotes in PHP:
- PHP zoveel mogelijk met enkele quotes('), dit is sneller
- 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.


Er zijn dus ook situaties waarin het aanbevolen is om dubbel te gebruiken.
Jeroen VD
Jeroen VD
15 jaar geleden
 
1 +1 -0 -1
ik zal het e.e.a. aanpassen/toevoegen

vind je het erg als ik jou stappenplan opneem in de conclusie (uiteraard met verwijzing naar jou)?
Wouter J
Wouter J
15 jaar geleden
 
0 +1 -0 -1
@Jeroen, nee hoor daarvoor schrijf ik hem :D

Toch nog wat puntjes:
- Je legt de oorzaak-gevolg relatie tussen HTML quotes en PHP quotes verkeerd. Het is niet zo dat we in HTML dubbel gebruiken omdat je dan in PHP enkel kan gebruiken, nee het is juist andersom. Omdat HTML in zijn begin jaren (voor PHP) als richtlijn heeft bedacht om altijd dubbel te gebruiken gebruiken we nu altijd dubbel voor HTML. Dit heeft tot gevolg dat je voor zo'n string in PHP enkele moet gebruiken, zie regel 3 hierboven.
- Je 1e voorbeeld in hoofdstuk 5 is niet correct. Je escaped hier de quotes niet.
- Mysql_real_escape_string zonder quotes in de query is niet veilig. Misschien ook verstandig om erbij te melden.
- De zin 'dit is sneller' even weghalen uit mijn stappenplan. Dit is tegenwoordig niet meer relevant. (zie ook http://phpbench.com/ )
Aapje yeah
Aapje yeah
15 jaar geleden
 
0 +1 -0 -1
Kijk hier ook even naar ;): http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

het grote verschil is dat je met dubbele quotes meer opties hebt
- SanThe -
- SanThe -
15 jaar geleden
 
0 +1 -0 -1
- Zodra je gebruik maakt van \n of een van de andere escaped characters gebruik je dubbele (") quotes.

Waarom?
Dit omdat de \n (en andere escaped characters) door de php-parser moeten om omgezet te worden naar de juiste ASCII-waarde. Alles wat binnen enkele quotes staat wordt niet geparsed. Dus '\n' levert gewoon een \ en een n op en "\n" geeft wel het juiste character.
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
ik heb vandaag en morgen zeer weinig tijd, ik zal vrijdag alle tips meenemen in een aangepaste versie. bedankt voor alle opbouwende kritiek!
Wouter J
Wouter J
15 jaar geleden
 
0 +1 -0 -1
En kijk ook eens naar de varianten op quotes voor string.

Bijv. de heredoc: (een variatie op double quotes)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$myString
= <<<"EOT"
Hello World \n
My Name is Jeroen VD
EOT;
?>


En de nowdoc: (variatie op single quotes)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$myString
= <<<'EOT'
Hello World
My Name is Jeroen
EOT;
?>


Het voordeel van deze variaties is dat je nooit quotes hoeft te escapen. Wat nadelen:
- de tekst in een *doc moet altijd op key 1 van een regel staan, er mogen geen tabs tussen zitten.
- nowdocs zijn er pas sinds PHP5.3.0
Php knipper
php knipper
15 jaar geleden
 
0 +1 -0 -1
en als je nu foto's in een echo wil zetten
mdat kan toch niet zoo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 'foto's';
?>

Dat moet toch met dubbele
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "foto's";
?>
Ozzie PHP
Ozzie PHP
15 jaar geleden
 
0 +1 -0 -1
Dan kun je de apastrof escapen via \

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 'foto\'s';
?>
Wouter J
Wouter J
15 jaar geleden
 
0 +1 -0 -1
@Ozzie, en omdat je escapen vaak moet vermijden zou je inderdaad gewoon dubbele quotes moeten gebruiken.

Overigens probeer ik dit soort dingen altijd te vermeiden. In foutmeldingen bijv. gebruik je wel eens doesn't of cann't, dan maak ik er snel van does not en cannot.
Ozzie PHP
Ozzie PHP
15 jaar geleden
 
0 +1 -0 -1
"en omdat je escapen vaak moet vermijden"

Hoe bedoel je dat je het MOET vermijden? Beide manieren zijn toch oke?
Wouter J
Wouter J
15 jaar geleden
 
0 +1 -0 -1
Beide zijn oké, maar escapen van slashes is toch wel een beetje slordig en niet strict correct. En het maakt eigenlijk geen verschil of je nou enkel of dubbel gebruikt. De snelheid optimalisatie is te verwaarlozen en voor de rest zijn ze praktisch hetzelfde.
Ozzie PHP
Ozzie PHP
15 jaar geleden
 
0 +1 -0 -1
Hmmm, oke... nooit geweten dat escapen strict niet correct is. Dat is nieuw. Dubbele quotes zijn (theoretisch) iets trager omdat dan alles geparsed en geëvalueerd wordt.
Wouter J
Wouter J
15 jaar geleden
 
0 +1 -0 -1
Ook single quotes worden geparsed. En wat ik al zei, je kunt het verwaarlozen. Voor de mensen die van cijfers houden: http://phpbench.com/ en ga dan naar hoofdstuk 3: Quote types.
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
@wouter:
Quote:
- Je 1e voorbeeld in hoofdstuk 5 is niet correct. Je escaped hier de quotes niet.
- Mysql_real_escape_string zonder quotes in de query is niet veilig. Misschien ook verstandig om erbij te melden.


Het idee was om gewoon de variabelen (mysql_real_escape_string()) buiten quotes te halen, waardoor je dus af moet sluiten. hier gaat dus veel mis, wat voor beginners moeilijk te begrijpen is. maar het kwam inderdaad niet zo mooi uit de verf, zal er eens aan werken
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
2 paginas toegevoegd, aantal dingen verbeterd. morgen meer
Bas Cost Budde
Bas Cost Budde
15 jaar geleden
 
0 +1 -0 -1
Wijzig je typo nog even, hoewel "correct gebruik van qoutes" me steeds aan het lachen maakt lijkt het me slechte reclame :)
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
ok dit is echt erg.... maar kan niet meer aanpassen, hopelijk dat niels het ziet, en even voor mij aanpast. Niels?
Niels K
Niels K
15 jaar geleden
 
0 +1 -0 -1
Hoi Jeroen,

Ik heb het aangepast. Echter, misschien is het beter als je mij hierover een PM stuurt? Dan kan ik dit soort dingen sneller oplossen ;-)

Niels
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
I know, maar om voor elk klein dingetje nou een pm te gaan sturen? je ziet dit vanzelf een keertje, en in 2 maanden is het blijkbaar nog niemand opgevallen.
Niels K
Niels K
15 jaar geleden
 
0 +1 -0 -1
Hoi Jeroen,

Als je wil dat het (snel) wordt aangepast kan je het beste een PM sturen. Ik lees natuurlijk niet alles ;-)

Niels
Donny Wie weet
Donny Wie weet
15 jaar geleden
 
0 +1 -0 -1
Een newline /n... Wat is het verschil met een <br />?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Wouter J
Wouter J
15 jaar geleden
 
0 +1 -0 -1
<br> is een HTML tag. Deze tag kan dus alleen worden omgezet tot een nieuwe regel als het eerst door een HTML parser wordt gehaald.
\n (let op! de \ en niet de /) is een new line in elke machine. Hiervoor is niet eerst een parser nodig.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. Variabelen buiten quotes
  3. Het verschil
  4. Quotes in html
  5. Quotes in php
  6. Uitzondering 1 - mysql
  7. Uitzondering 2 - escaped characters
  8. Nawoord

Labels

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.