/ Forside / Teknologi / Udvikling / HTML / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
HTML
#NavnPoint
molokyle 11184
Klaudi 5506
bentjuul 3377
severino 2040
smorch 1950
strarup 1525
natmaden 1396
scootergr.. 1320
e.c 1150
10  miritdk 1110
Hvorfor alle disse skråstreger?
Fra : Jakob Munck


Dato : 19-12-05 13:20

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\">
-------------------------------

Hvad er nytten disse skråstreger?
Er det noget som er særligt for php-baserede websites?


v.h.
Jakob



 
 
Bertel Lund Hansen (19-12-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 19-12-05 13:44

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 &lt; som tegn for "mindre end".</td></tr>

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Jakob Munck (19-12-2005)
Kommentar
Fra : Jakob Munck


Dato : 19-12-05 13:53

Tak for svaret.

Jakob



Jens Gyldenkærne Cla~ (19-12-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 19-12-05 14:36

Bertel Lund Hansen skrev:

> 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.

Det kan fx være hvis man skal udskrive html med indlejret
javascript.

HTML-kode: <a href="foo" onclick="alert('bar')">foo</a>

I php:

print "<a href=\"foo\" onclick=\"alert('bar')\">foo</a>"


> I Comal80 (samt visse andre) skulle man bare fordoble
> anførselstegnene, altså:
>
> Ikke PHP!:
> print "<input type=""radio"" name=""action"" value=""sub""
> checked>"


- den metode anvendes fx i asp/vbscript og asp.net/vb.net.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Christoffer (19-12-2005)
Kommentar
Fra : Christoffer


Dato : 19-12-05 15:02


"Bertel Lund Hansen" <nospamfilius@lundhansen.dk> skrev i en meddelelse
news:166nbkpizsal6$.p0zg22sckz7h$.dlg@40tude.net...
> 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.
Det er kun i print at varibler bliver udskrevet som variabelnavn istedet for
dens indhold hvis du bruger ' istedet for citationstegn ".
Med echo vil alle variabler blive udskrevet med deres indhold.

--
Christoffer



Mads Lie Jensen (06-01-2006)
Kommentar
Fra : Mads Lie Jensen


Dato : 06-01-06 08:45

On Mon, 19 Dec 2005 15:02:20 +0100, "Christoffer"
<christoffer@buur.info> wrote:

>> 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.

>Det er kun i print at varibler bliver udskrevet som variabelnavn istedet for
>dens indhold hvis du bruger ' istedet for citationstegn ".
>Med echo vil alle variabler blive udskrevet med deres indhold.

Nej. En variabel bliver _kun_ erstattet med dens indhold hvis den står i
dobbeltpinger.
Ligegyldigt om du bruger print() eller echo.

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
-snart med hund: http://vedskovens.dk/d/hv/2005_olivia/051030/051030_d2.htm

Gartneriet - snart i ny indpakning: http://ny.gartneriet.dk

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste