single quotes vs double quotes

kongen

kongemedlem
Jeg har denne koden. I arrayen så er det en single quote i firmanavnet. Denne må være der. Arrayen skal så kastes inn i et skjema som lages med php. Arrayen har også double quotes i seg.

PHP:
$values = serialize(array(
"navn" => "Pål Pålsen",
"firma" => "Pål's hønefarm"
));

$form = "<form action='' method='post'>
<input type='hidden' name='values' value='".$values."' />
<input name='Submit' type='submit' value='Send' />
</form>";

echo $form;

Når jeg ser på kildekoden i Firefox så har skemafeltet 'values' fått rød skrift pga det ikke valideres riktig i hht w3c.

Når skal man bruke single quotes og når skal man bruke double quotes?
 

adeneo

Medlem
Her finnes det alternativer.

Man kan enten skrive riktig norsk
PHP:
$values = serialize(array(
    "navn"  => "Pål Pålsen",
    "firma" => "Påls hønefarm"
));

eller bli helt amerikaner og bruke backtick
PHP:
$values = serialize(array(
    "navn"  => "Pål Pålsen",
    "firma" => "Pål`s hønefarm"
));

eller skrive riktig PHP med escaping
PHP:
$values = serialize(array(
    "navn"  => "Pål Pålsen",
    "firma" => "Pål\'s hønefarm"
));

eller bruke doble tødler i HTML'en
PHP:
$values = serialize(array(
    "navn"  => "Pål Pålsen",
    "firma" => "Pål's hønefarm"
));

$form = '<form action="" method="post">
    <input type="hidden" name="values" value="'.$values.'" />
    <input name="Submit" type="submit" value="Send" />
</form>';

echo $form;
 

kongen

kongemedlem
Hvordan escaper man en string som inneholder båre ' og "

PHP:
Thomas' høner legger egg "hver" dag

Jeg får ikke lagt stringen i addslashes når stringen inneholder begge typer quotes.
 

adeneo

Medlem
Litt usikker, men noe sånt kanskje
PHP:
$str1 = 'Thomas\' høner legger egg "hver" dag';
$str2 = addslashes($str1); // Thomas\' høner legger egg \"hver\" dag
 

kongen

kongemedlem
Addslashes fikser det meste. Problemet var at hvis en value har double quotes i seg så tror browseren at den skal lukke value med denne quoten.

eksempel:

PHP:
$hello = 'Koding er "lett" ';
<input type="hidden" name="hello" value="'.$hello.'" />

Så blir det i browseren noe slik

PHP:
<input type="hidden" name="hello" value="Koding er "lett"" />

Slik at value blir

PHP:
Koding er

mens

PHP:
lett""

står utenfor value.

Når man skal dytte en array som inneholder både single og double quotes inne i et skjemafelt så er det som å be om trøbbel. Kan man poste data på andre måter enn skjema uten bruk av javascript?
 
Topp