Just nu i M3-nätverket
Gå till innehåll
Cattas

SQLfråga

Rekommendera Poster

Ok nu vet jag att min databas har magic quotes på.

En petitess men det är alltså inte databasen som har några magic quotes, det är PHP som har inställningen och som därför försöker fixa till datat innan du får det när någon gör POST/GET eller skickar dig en Cookie.

 

 

och då gör jag så här:

 

if( get_magic_quotes_gpc() )

stripslashes(textString);

Vilket inte fungerar eftersom stripslashes() returnerar den strippade strängen och du struntar ju i returvärdet.

 

Gör som jag skrev tidigare (och nedan) överst på sidan och glöm sen allt vad magic quotes heter och använd mysqk_escape_string()/mysql_real_escape_string() som man ska göra.

<?[color="#0000ff"]php[/color]
[color="#0000ff"]if[/color] (([color="#ff0000"]strcasecmp[/color]([color="#0000ff"]$[/color]_SERVER['REQUEST_METHOD'], "POST")==0)
&& [color="#ff0000"]get_magic_quotes_gpc[/color]()) {
  [color="#0000ff"]foreach[/color]([color="#0000ff"]$[/color]_POST [color="#0000ff"]as[/color] $[color="#ff0000"]key[/color] => $value) {
    [color="#0000ff"]$[/color]_POST[$[color="#ff0000"]key[/color]]=[color="#ff0000"]stripslashes[/color]($value);
  }
}
?>

Snyggare här: http://c8b6a2202990cd52.paste.se/

 

har jag tänkt rätt då?

Nästan iaf :-)

 

Gör jag då en kontroll av det jar har hämtat upp från databasen och dyker det upp ett ' så byter jag ut det mot '?

 

Du måste byta ut alla reserverade tecken, här är en funktion som finns bland exemplen till htmlentities() i PHP-dokumentationen, använd den:

 

[color="#0000ff"]function[/color] xmlentities($[color="#0000ff"]string[/color]) {
   [color="#0000ff"]return[/color] [color="#ff0000"]str_replace[/color] ( [color="#0000ff"]array[/color] ( '&', '"', "'", '<', '>', '&[color="#006400"]#65533;' ), [/color]
       [color="#0000ff"]array[/color] ( '&' , '"', ''' , '<' , '>', ''' ), $[color="#0000ff"]string[/color] );
}

(från http://www.php.net/htmlentities)

 

Edit: Det sista kodexemplet verkar ha en tendens att gå sönder i eforum... Finns här också: http://5943fea8884b7a09.paste.se/

[inlägget ändrat 2005-12-23 11:16:33 av fhe]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ska kolla på magic quotes men nu så har jag fångats i xmldokumentet.

 

 

Såjag fick det här funka i xmldokumentet:

 

htmlspecialchars($text->textstring, ENT_QUOTES);

 

Kan jag använda det? Eller är det hellre att föredra:

 

function xmlentities($string) {
  return str_replace ( array ( '&', '"', "'", '<', '>', '&#65533;' ), 
      array ( '&' , '"', '&apos;' , '<' , '>', '&apos;' ), $string );
}

 

Tack för att jag får fråga ut dej!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
htmlspecialchars($text->textstring, ENT_QUOTES);

 

Kan jag använda det?

"Kan" är ett realtivt begrepp, varför skulle du använda den?

Den gör ju mycket mer och det mesta är helt onödigt för dig (vill du prompt använda den bör du nog speca charset som tredje argument, XML är utf-8 om du inte angett något annat, htmlspecialchars() defaultar till iso-8859-1).

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Men om jag i min input skriver så här:

 

value=\"" . $this->_text->textstring . "\">

 

Så är det någon användare som skriver in " i sin mening. Då kommer ju " avsluta input tagen.

 

Ska man ha en funktion som i xmlfilen?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Du har ju själv tittat på htmlentities() förut, använd den (när du gör HTML)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

escape sats alltså? Då har jag något att läsa på. Nu måste jag sticka iväg.

 

Men ville bara tacka för hjälpen och önska en riktigt god jul!

 

God jul på er alla som läser detta!

 

/C

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
escape sats alltså?

Nej, htmlentities() gör inget escapeande. Den gör om reserverade tecken så att de fungerar i html och returnerar en html-kompatibel sträng. Precis som den xmlentities() som jag klistrade in tidigare i tråden fast den gör om en massa andra tecken också...

 

Exakt vad som görs om (och till vad) kan du se om du kör följande:

<?[color="#0000ff"]php[/color]
<?[color="#0000ff"]php[/color]
[color="#0000ff"]echo[/color] "<pre>".[color="#ff0000"]htmlentities[/color](
    [color="#0000ff"]print[/color]_r([color="#ff0000"]get_html_translation_table[/color]([color="#ff8C00"]HTML_ENTITIES[/color]), [color="#ff8C00"]TRUE[/color]))
    ."</pre>";
?>

 

Edit: Korrigering av koden ovan

[inlägget ändrat 2005-12-23 14:42:40 av fhe]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Petitesser kanske, men...

Nej, htmlentities() gör inget escapeande.
Jo.

 

Den gör om reserverade tecken så att de fungerar i html och returnerar en html-kompatibel sträng.
Vilket är precis vad "escape sequence" betyder.

 

Hur man skyddar specialtecken varierar från format till format. I HTML och XML kan man t ex använda teckenentitetsreferenser (http://en.wikipedia.org/wiki/Character_entity_reference , dvs &quot; mfl)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Vilket är precis vad "escape sequence" betyder.

Nåja, själva ordet "escape sequence" kommer av de kontroll-sekvenser för framförallt terminalemulering som börjar med ett ESC, där alltså ESC är ett specialtecken som markerar att det som följer efter inte ska tolkas som om det stod för sig själv. I dagens lite mer vida tolkning har man låtit andra tecken än just ESC bli "escape-tecken" men det är absolut inte att escapea å när man byter ut det mot dess ekvivalenta å betydelsen av å och å är helt identisk.

 

Det htmlentities() gör är en ren översättning.

 

Fast det är som du säger en petitess och spelar egentligen ingen roll alls för användaren.

 

Edit: Tar jullov från eforum nu och avslutar mina bevakningar. God Jul

[inlägget ändrat 2005-12-23 17:26:18 av fhe]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Hur man skyddar specialtecken varierar från format till format.

Men visst, jag ser din poäng och i någon mån kan väl kalla & för escape-tecken även om jag tycker själva entitetskonceptet lyfter entiteterna en nivå från att vara escape-sekvenser.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Hej igen!

 

Nu tror jag att jag har fått allt att fungera! :)

 

Tack för all hjälp, det har varit en nyttig lektion!

 

Gott nytt år!

 

/C

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...