PDA

View Full Version : PHP : 'Beste' manier om strings te escapen


logion
27-03-2007, 20:53
Bij elke website escape ik user input wel op een of andere manier.
Maar nu wil ik dit graag gieten in function vorm, zodat ik deze kan gebruiken voor al m'n websites.
Ik heb wat zitten knoeien en uiteindelijk ben ik tot dit gekomen:

function escapeString($string) {
if(!get_magic_quotes_gpc()) {
$string = str_replace("\"", """, $string);
$string = str_replace("'", " '", $string);
}

$string = str_replace("&", "&", $string);
$string = str_replace("<", "&lt;", $string);
$string = str_replace(">", "&gt;", $string);

return $string;
}
function stripString($string) {
return stripslashes($string);
}
function printString($string) {
return nl2br(stripString($string));
}
$escaped = escapeString($_POST["text"]);
echo"ESCAPED:<br />" . $escaped . "<br /><br />";

$stripped = stripString($escaped);
echo"STRIPPED : <br /> ". $stripped . "<br /><br />";

$onscreen = printString($stripped);
echo"ON SCREEN : <br /> ". $onscreen . "<br />";

Dit werkt perfect maar volgens mij kan het nog beter.
Zo is een punt van kritiek dat mysql_escape_string niet gebruikt wordt.
Nu, ik was oorspronkelijk begonnen met mysql_escape_string(), maar deze escapt ook de newlines. Zo stond er in de database "Blabla \'\"bla.\nBlaBla", als ik dan stripslashes gebruikte-om de gegevens uit te lezen- stond er in mijn string voor elke return nog een "n". Dan had je
"Blabla '"
n BlaBla" als resultaat
Iemand die weet hoe ik dit kan vermijden? (returns eerst omzetten naar <br /> dmv. nl2br werkt niet, want dan zet htmlentities de "<" en de ">" om naar html entities)

Shai-Hulud
27-03-2007, 21:46
Ondersteunt PHP nu nog altijd geen geparameteriseerde queries?

logion
28-03-2007, 13:27
Ondersteunt PHP nu nog altijd geen geparameteriseerde queries?

Dan nog moet HTML gefilterd worden, had er niet aangedacht direct eens proberen.(mogelijk via pear package, MDB2 voor wie het niet wist)

ecko
28-03-2007, 13:34
Ge kunt tags strippen en bepalen welke moeten blijven dacht ik.
strip_tags ofzo?
Doe nl2br en dan die strip_tags of wat het ook was.