Jakob Munck skrev:
> Flere gange har jeg (især i php-sammenhæng) set html-kode, der var fyldt med
> skråstreger, som f.eks. denne form her:
> <form method=POST action=\"$_SERVER[PHP_SELF]\">
>
> <p><strong>Your E-Mail Address:</strong><br>
> <input type=text name=\"email\" size=30 maxlength=150>
>
> <p><strong>Action:</strong><br>
> <input type=radio name=\"action\" value=\"sub\" checked> subscribe
> <input type=radio name=\"action\" value=\"unsub\"> unsubscribe
>
> <input type=\"hidden\" name=\"op\" value=\"ds\">
> -------------------------------
Jeg tror at du har gengivet det forkert, men skidt nu med det.
Der opstår et problem hvis man har en streng inden i
anførselstegn, og man så får brug for at have anførselstegn med
inde i strengen. Det sker typisk hvis man laver en printsætning
af noget HTML-kode. Eksempel:
Rå HTML:
<input type="radio" name="action" value="sub" checked>
Print med PHP (*fejl*):
print "<input type="radio" name="action" value="sub" checked>";
Det går helt galt. Der står jo
print "<input type="
og så kommer der pludselig radio bagefter.
Løsning 1: Print med PHP:
print "<input type=\"radio\" name=\"action\" value=\"sub\" checked>";
Her bruges \ til at ophæve anførselstegnets PHP-betydning i en
printsætning så det bare fungerer som et vilkårligt tegn. Af
hostoriske grunde kalder man det at man escaper anførselstegnet.
Jeg bruger en anden løsning. I HTML er det ligegyldigt om man
bruger enkelt eller dobbelt anførselstegn. Hvis man har en
printsætning der 'styres' af ét sæt anførselstegn, kan man bruge
det andet sæt indeni. Derfor kan man også skrive:
Løsning 2: Print med PHP:
print "<input type='radio' name='action' value='sub' checked>";
og det synes jeg er meget lettere at læse end løsning 1. Men der
er ingen kvalitetsforskel mellem løsningerne, og man skal under
alle omstændigheder kunne 1'eren også, for man kan blive tvunget
til at bruge dobbelte anførselstegn inde i en streng.
Bemærk at det ikke dur at escape enkelte anførselstegn fordi
variable og koder (som \") bliver kun oversat hvis de står inden
i dobbelte anførselstegn.
> Er det noget som er særligt for php-baserede websites?
Nej, escapemetoder er nødvendige i snart sagt alle
programmeringssprog. Hvis man skal bruge specialtegn, må man
vælge nogle ud og give dem en særlig betydning. Når man så får
brug for at de *ikke* skal have den betydning, må man bruge en
metode til at ophæve det. Sprog i C-familien bruger \.
I Comal80 (samt visse andre) skulle man bare fordoble
anførselstegnene, altså:
Ikke PHP!:
print "<input type=""radio"" name=""action"" value=""sub"" checked>"
I HTML er der ikke en egentlig escapemetode. Der må man skrive
koder i stedet for:
HTML (*fejl*):
<tr><td>I matematikken bruges < som tegn for "mindre end".</td></tr>
HTML (rigtigt):
<tr><td>I matematikken bruges < som tegn for "mindre end".</td></tr>
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/