Hi
Ich habe eine Seite, wo einiges an Text in eine Datenbank gespeichert wird. Ich weiß nicht, wie es dazugekommen ist, aber es ist dazu gekommen, dass Zeichen wie ", aber nicht Umlaute doppelt escaped wurden.
Ein " steht jetzt in der Datenbank als '"'
Das & wurde also nochmals escaped.
Der Browser recodiert dann das erste & und stellt dann ein '"' dar.
Da dachte ich mir, ein regulärer Ausdruck, der & vor einem zweiten escapten Zeichen schon serverseitig recodiert könnte klappen, klappt aber nicht.
Hier mein Ausdruck:
Was mache ich da falsch?
Habe jetzt den Fehler gefunden:
Habe mir selbst eine Funktion erstellt, die den POST und GET array testet:
Die Funktionen sollen den escapten Inhalt wieder in den GET bzw. POST array schreiben. Leider habe ich diese Funktionen versehentlich zweimal angewendet, wodurch das & ein zweites Mal escaped wurde.
Ich habe eine Seite, wo einiges an Text in eine Datenbank gespeichert wird. Ich weiß nicht, wie es dazugekommen ist, aber es ist dazu gekommen, dass Zeichen wie ", aber nicht Umlaute doppelt escaped wurden.
Ein " steht jetzt in der Datenbank als '"'
Das & wurde also nochmals escaped.
Der Browser recodiert dann das erste & und stellt dann ein '"' dar.
Da dachte ich mir, ein regulärer Ausdruck, der & vor einem zweiten escapten Zeichen schon serverseitig recodiert könnte klappen, klappt aber nicht.
Hier mein Ausdruck:
PHP:
$str = preg_replace('/&(.*?;)/', '&\1', $str);
Was mache ich da falsch?
Ergänzung ()
Habe jetzt den Fehler gefunden:
Habe mir selbst eine Funktion erstellt, die den POST und GET array testet:
PHP:
// form validation
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// form validation in $_POST schreiben
function test_post()
{
foreach($_POST as $key=>$value)
{
$_POST[$key] = test_input("$value");
}
}
// form validation in $_POST schreiben
function test_get()
{
$TGET = array();
foreach($_GET as $key=>$value)
{
$key = test_input("$key");
$value = test_input("$value");
$TGET[$key] = $value;
}
$_GET = $TGET;
}
Die Funktionen sollen den escapten Inhalt wieder in den GET bzw. POST array schreiben. Leider habe ich diese Funktionen versehentlich zweimal angewendet, wodurch das & ein zweites Mal escaped wurde.