Avatar billede htx98i17 Professor
16. juni 2012 - 20:24 Der er 28 kommentarer og
1 løsning

urlencode form specialtegn og æøå

Jeg har følgende:

<a href="side.php?foo=<?php echo(urlencode('Hær"e'); ?>" >Klik</a>

<input type="text" value="<?php echo(hvilken_funktion($foo)); ?>" >

- funktionen skal tage højde for både specialtegn og ÆØÅ...

Det har drillet mig, så nu spørger jeg uden at forklare mere.
Avatar billede olebole Juniormester
16. juni 2012 - 20:30 #1
<ole>

Brug utf-8 overalt, så har du ikke problemer - og du behøver ikke bruge urlencode. Sørg for at:

1) have en utf-8 meta i alle dokumenter
2) gemme alle dokumenter som utf-8 (tjek, hvad din editor gemmer som)
3) din DB og tabeller er sat til utf8_danish_ci
4) din server sender dokumenterne som utf-8

/mvh
</bole>
Avatar billede htx98i17 Professor
16. juni 2012 - 20:35 #2
1) tjek
2) tjek
3) de er sat til utf8_general_ci og burde ikke have indflydelse så længe DB ikke er i brug i dette tilfælde (endnu)? er general ikke lige så anvendelig ellers?
4) hvordan sørger man for det?
Avatar billede olebole Juniormester
16. juni 2012 - 20:45 #3
Nej, brug utf8_danish_ci ... ikke utf8_general_ci.

4) Du kan loade siden i FF - højreklikke og vælge Page Info. Du kan også bruge W3C's validator og vælg Verbose Output til
Avatar billede htx98i17 Professor
16. juni 2012 - 20:49 #4
4) men det gør en almindelig bruger jo ikke?
Avatar billede olebole Juniormester
16. juni 2012 - 20:50 #5
- og så mangler du da vist i øvrigt en ) i linket ovenfor  =)
Avatar billede olebole Juniormester
16. juni 2012 - 20:52 #6
#4: Nej, og hvad så? Du spørger, hvordan du undersøger, hvad serveren sender dokumentet som. Det gør du som forklaret. Hvad brugeren gør, må være hans valg  =)
Avatar billede htx98i17 Professor
16. juni 2012 - 20:58 #7
w3 siger:


Modified:

(undefined)



Server:

Apache/2.0.59 (FreeBSD) mod_python/3.3.1 Python/2.4.4 PHP/5.2.3 with Suhosin-Patch mod_ssl/2.0.59 OpenSSL/0.9.7e-p1 mod_perl/2.0.3 Perl/v5.8.8



Size:

1412



Content-Type:

text/html



Encoding:

utf-8

(detect automatically)


Doctype:

HTML5



Root Element:

html
Avatar billede htx98i17 Professor
16. juni 2012 - 21:05 #8
1) tjek
2) tjek
3) tjek
4) tjek

Det hjalp på at jeg ikke behøves at bruge urlencode for at ÆØÅ vises rigtigt i formfeltet.

Men specialtegn som anførselstegn " vises ikke i textfeltet og bruger jeg htmlentities laves den ÆØÅ om til mærkelige tegn?
Avatar billede olebole Juniormester
16. juni 2012 - 21:15 #9
I en attribut som value skal du formodentlig escape gåseøjne som &quot;. Hvor bruger du htmlentities?
Avatar billede olebole Juniormester
16. juni 2012 - 21:17 #10
Escaper du value med apostroffer, kan du formodentlig godt bruge dobbelte gåseøjne (utestet):

<input name="foo" type="text" value='Æbler og "pærer"'>
Avatar billede htx98i17 Professor
16. juni 2012 - 21:23 #11
Jeg brugte htmlentities således:

<input type="text" value="<?php echo(htmlentities($foo)); ?>" >
Det betød at ÆØÅ blev til mærkelige tegn.

Men jeg brugte jo urlencode ikke kun for ÆØÅ's skyld. Men også for specialtegnenes skyld. Så hvis jeg ikke bruger den vil der stå specialtegn i URL som ødelægger værdierne når de skal skrives til values...
Avatar billede olebole Juniormester
16. juni 2012 - 21:27 #12
Hvilken URL? Kan du ikke godt prøve at bruge lidt energi på at forklare for folk, der ikke sidder inde i dit hovede? Jeg er som i en anden tråd bemærket ikke clairvoyant
Avatar billede htx98i17 Professor
16. juni 2012 - 21:36 #13
Det er stadig samme url som i spørgsmålet:

<a href="side.php?foo=<?php echo(urlencode('Hær"e'); ?>" >Klik</a>

Værdien af foo indeholde både 'æ' og anførselstegn.

Jeg søger en løsning hvor der kommer til at stå Hær"e som value i en:
<input type="text" value="">

Din løsning i #1 gjorde at ÆØÅ vises korrelt i input-feltet.
Men anførselstegnet bliver ikke vist i inputfeltet. Browseren tror at det skal bruges til at escape value.

Derfor brugte jeg htmlentities:
<input type="text" value="<?php echo(htmlentities($foo)); ?>" >

Det hjalp på anførselstegnet, men det betød at ÆØÅ blev lavet om til mærkelige tegn: hær"'w

Håber det hjalp
Avatar billede htx98i17 Professor
16. juni 2012 - 21:38 #14
Rettelse: Det hjalp på anførselstegnet, men det betød at ÆØÅ blev lavet om til mærkelige tegn: hær"e
Avatar billede olebole Juniormester
16. juni 2012 - 21:43 #15
Sorry, jeg var igang med INPUT elementet. En URL skal naturligvis altid urlencodes - men koden:

<a href="side.php?foo=<?php echo(urlencode('Hær"e')); ?>" >Klik</a>

- burde da fungere fint. Hvilke problemer har du med den?
Avatar billede olebole Juniormester
16. juni 2012 - 21:45 #16
- og i feltet skal du bare escape value med apostroffer:

<input name="foo" type="text" value='Æbler og "pærer"'>
Avatar billede olebole Juniormester
16. juni 2012 - 21:49 #17
Testet og virker som ventet:

<?php
if (!empty($_POST)) {
    var_dump($_POST);
}
if (!empty($_GET)) {
    var_dump($_GET);
}
?>
<a href="?foo=<?php echo(urlencode('Hær"e')); ?>">Klik</a>

<form action="" method="post">
<input name="foo" type="text" value='Æbler og "pærer"'>
<p>
    <button type="submit" onclick="this.form.method='get'">Send som GET</button>
    <button type="submit">Send som POST</button>
</p>
</form>
Avatar billede htx98i17 Professor
16. juni 2012 - 21:52 #18
Forstil dig at du klikker på linket:
<a href="side.php?foo=<?php echo(urlencode('Hær"e')); ?>" >Klik</a>

Problemet er, at når værdien foo skal indsættes i value:
<input type="text" value="<?php echo(urldecode($_GET['foo'])); ?>" >

Så viser browseren indholdet i value således: hær
(browser tror anførselstegnet skal bruges til at escpape value)

Derfor har jeg forsøgt:
<input type="text" value="<?php echo(htmlentities($_GET['foo'])); ?>" >

og

<input type="text" value="<?php echo(urlencode(htmlentities($_GET['foo']))); ?>" >

hvilket giver følgende samme resultat: hær

Så hvordan får browseren til at vise anførselstegnet fra værdien foo i value på input-elementet?
Avatar billede htx98i17 Professor
16. juni 2012 - 21:57 #19
Hvis jeg bruger apostroffer til at escape med, så vil jeg få samme problem hvis value indeholder et apostrof.
Avatar billede olebole Juniormester
16. juni 2012 - 22:03 #20
Jeg giver op. Du må få nogen til at lære dig at stille et spørgsmål på en måde, så du får forklaret, hvad det faktisk er, du vil. Du spilder min tid på at lege quiz ... det gider jeg ikke lege
Avatar billede htx98i17 Professor
16. juni 2012 - 22:06 #21
Jeg leger ikke med dig.

Men tak for din tid.
Avatar billede htx98i17 Professor
16. juni 2012 - 22:15 #22
Altså dit eksempel i #17 holder ikke.

Du skal prøve dette, så må du da kunne se hvad problemet er:

<!DOCTYPE html>
<HTML>
    <HEAD>
        <META http-equiv="content-type" content="text/html; charset=UTF-8">
    </HEAD>
   
<BODY bgcolor="#FFFFFF" >
   
    <?php
if (!empty($_POST)) {
    var_dump($_POST);
}
if (!empty($_GET)) {
    var_dump($_GET);
}
?>
<a href="?foo=<?php echo(urlencode('Hær"e')); ?>">Klik</a>

<form action="" method="post">
<input name="foo" type="text" value="<?php echo$_GET['foo']; ?>">
<p>
    <button type="submit" onclick="this.form.method='get'">Send som GET</button>
    <button type="submit">Send som POST</button>
</p>
</form>

</body>
</html>
Avatar billede olebole Juniormester
16. juni 2012 - 22:20 #23
Jo, mit eksempel i #17 holdt helt fint i forhold til din forklaring. Jeg kan jo ikke gøre for, du først i #18 fortæller mig, at du vil skrive $_GET['foo'] ind i feltet
Avatar billede htx98i17 Professor
16. juni 2012 - 22:28 #24
Det fortæller jeg dig allerede i det oprindelige spørgsmål.
Derudover i #11 og #13

Du er selv igang med det i #9 og #10.

Jeg har hele tiden omtalt at værdien af foo skal i value.

Jeg tror du skal lade dette spm ligge til nogle mere vågne eksperter. Du er vist bare ude på at kværulere.

Tak for din tid.
Avatar billede olebole Juniormester
16. juni 2012 - 22:40 #25
Vrøvl! Det fortæller du intet om i spørgsmålet og heller ikke i #11 eller #13. At forstå det kræver, man kan læse dine tanker
Avatar billede olebole Juniormester
16. juni 2012 - 22:43 #26
Kan du ikke fortælle mig, hvor du her omtaler, at $_GET['foo'] skel udskrives i feltets value?

"Jeg har følgende:

<a href="side.php?foo=<?php echo(urlencode('Hær"e'); ?>" >Klik</a>

<input type="text" value="<?php echo(hvilken_funktion($foo)); ?>" >

- funktionen skal tage højde for både specialtegn og ÆØÅ...

Det har drillet mig, så nu spørger jeg uden at forklare mere."


Jeg kan ikke finde det
Avatar billede showsource Seniormester
17. juni 2012 - 17:41 #27
Til formfelter, plejer jeg at bruge htmlspeialchars()
http://dk.php.net/manual/en/function.htmlspecialchars.php
Avatar billede htx98i17 Professor
18. juni 2012 - 16:14 #28
Perfekt showsource! Det var lige det som skulle til. Lig et svar.
Avatar billede showsource Seniormester
20. juni 2012 - 16:50 #29
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester