Strul med addslashes() / magic_quotes_gpc

PHP

5 svar · 251 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Trådstart#1

Innan jag lägger in data i min MySQL-databas kör jag addslashes() om inte magic_quotes_gpc är aktiverat, men när jag väl lagt in datan i databasen finns inga "slashar" kvar.

Jag testar att skicka in "foo" i databasen (inkl. citationstecknen) och när jag skriver ut strängen precis innan jag kör mysql_query() ser den ut enligt följande:

\"foo\"

Men när jag tittar i databasen ser den ut så här:

"foo"

Hur kommer sig detta?

Medlem sedan apr. 20012 427 inlägg
#2

Hmmm... när jag tänker efter är det väl exakt så det är tänkt att det ska fungera. Men när t.ex. redigerar en nyhet och skriver ut en rubrik från databasen till ett formulärfält försvinner att text efter det första citationstecknet eftersom det avslutar value-attributet.

Vad är det bästa sättet att hantera detta på?

Medlem sedan apr. 20012 427 inlägg
#3

Oops.. det här vart helt fel forum. Flytta gärna till PHP.

Medlem sedan aug. 20002 975 inlägg
#4

Ska du lägga in något i ett formulärsfält, kör htmlentities() eller htmlspecialchars() på det först.

<input type="text" name="var" value="<?php echo htmlentities($variabel, ENT_QUOTES) ?>">
Medlem sedan apr. 20012 427 inlägg
#5

Tack Matte, jag hittade även följande artikel i ämnet:
http://www.zend.com/zend/tut/using-strings.php#double

Zend skrev:

HTML does not support the use of slashes to escape double quotes. This is of particular concern when using hidden inputs in HTML forms to pass data, and when giving fields a default value. The best way to protect the data is to use htmlspecialchars() on it when creating the hidden input or default value.

Medlem sedan mars 20025 907 inlägg
#6

Flyttas från PC.

377 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
119 ms — deklarationer (db)
119 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)