Willkommen in der Webstatt Zum Webstatt Blog und Stories
Dustwolf Dustwolf am 05.10.06 10:53

Also, wenn ich ein Formular abschicke, per PHP auswerten will und dann folgendes erhalte, ist das irgendwie kontraproduktiv. Und zwar werden gewisse Zeichen ja escaped. Das schaut dann so aus:
<?php

echo 'Dies ist ein Test';

?>

<?php

echo \'Dies ist ein Test\';

?>

<?php

echo \\\'Dies ist ein Test\\\';

?>

Und so weiter. Der PHP-Code der dahinter steht, sieht so aus:
<?php
echo $_POST['text'].'<br><br>'.highlight_string($_POST['text'], true);
?>
<form action="test.php" method="POST">
<textarea cols="64" rows="20" wrap="OFF" name="text"><?php echo $_POST['text']; ?></textarea>
<input type="submit" value="senden">
</form>


PHP bzw. das Script an sich scheint aber nur ein Escape zu erkennen:
<?php

echo 'Dies ist ein Test\\\';

?>

Zumindest laut Highlight_string().

Das Problem scheint ja beim Formular zu liegen. Ansonsten bitte einfach ins PHP-Forum verschieben! Danke,schonmal...

netcup.de Warum gibt es hier Werbung?
Franky Franky am 05.10.06 11:05

schonmal etwas von stripslashes(); gehört? ;)

Hab hier gerade mal etwas für dich:
// Slashes entfernen
if(get_magic_quotes_gpc()){
if(is_array($_REQUEST)) $_REQUEST = stripslashes_array($_REQUEST);
if(is_array($_POST)) $_POST = stripslashes_array($_POST);
if(is_array($_GET)) $_GET = stripslashes_array($_GET);
if(is_array($_COOKIE)) $_COOKIE = stripslashes_array($_COOKIE);
if(is_array($_SERVER)) $_SERVER = stripslashes_array($_SERVER);
}


Und die Funktion:
// global.php zum stripslashes entfernen
function stripslashes_array(&$array){
reset($array);
foreach($array as $key => $value){
if(is_string($value)) $array[$key] = stripslashes($value);
elseif(is_array($value)) $array[$key] = stripslashes_array($value);
}
return $array;
}


so mach ich das zumindest ;) darfst nur nicht vergessen in ner mysql_query() oder so wieder addslashes() zu verwenden :)

Dustwolf Dustwolf am 05.10.06 11:36

Hatte mit Addslashes und so auch schon geschaut. Aber: Dann entfernt er doch auch die absichtlich escapeten Zeichen, oder?

Nachtrag: Getestet und es funktioniert auch bei absichtlichen "slashes". Vielen Dank dafür, hab ich mir lange den Kopf dran zerbrochen. :D

sili sili am 05.10.06 12:56

So ist es etwas kürzer:

// wenn magic_quotes_gpc angeschaltet
if (get_magic_quotes_gpc()) {

function my_stripslashes($var)
{
return is_array($var) ? array_map('my_stripslashes', $var) : stripslashes($var);
}

$_GET = array_map('my_stripslashes', $_GET);
$_POST = array_map('my_stripslashes', $_POST);
$_COOKIE = array_map('my_stripslashes', $_COOKIE);
$_REQUEST = array_map('my_stripslashes', $_REQUEST);
}


Allerdings testet das Script nicht, ob die Arrays überhaupt definiert sind.

Alternativ kannst du auch direkt die magic_quotes_gpc Direktive ändern.

Für MySQL verwendest du besser mysql_real_escape_string() ;)

Dustwolf Dustwolf am 05.10.06 13:31

Jo, hab ich auch noch an meine Funktion angehängt. Meine Class schaut gleich, ob ich per Parameter ein Escapen verlange.

Dann kommen erst alle Slashes raus, dann wird der Text entsprechend veraendert und dann wird wieder escaped. :D
Ich danke auf jeden Fall.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt