Hi,
bei einer Suche leite ich mit "header" so weiter, dass das Suchergebnis ein Pfad wird:
in einem "Else"-Zweig leite ich (inkl. 301 Meldung) auf einen rein kleingeschriebenen Pfad weiter:
funktioniert soweit ja auch ganz gut, könnte man durchaus aber auch im ersten Schritt mit abfangen (wobei man dann auch das 301 ignorieren könnte), problematisch wird es aber, wenn jemand den Pfad direkt eingeben würde:
z.B.: "http://www.domain.info/suchbegriff/suchstring/"
Solange keine Sinderzeichen auftreten, ist das alles ganz unproblematisch, kommen aber url-relevante Zeichen (z.B. &, #, ? oder %) funktioniert es natürlich nicht (im günstigensten Fall wird ein Suchbegriff beschnitten, im anderen Fall (z.B. bei "%") erhalte ich die Apachemeldung "Fehlerhafte Anfrage".
Ein bißchen Recherche brachte zum Vorschein, das es im Grunde unmöglich ist zu testen ob ein String url-enkodiert ist, bzw. kann man wohl fehlerhafte Anfragen vermeiden, indem man einen String auf die kritischen Zeichen überprüft (und dann ggf. speziell nur diese enkodiert oder gar rauswirft).
Hat da jemand vielleicht schon eine entsprechende Funktion oder eine evt. einen regulären Ausdruck parat, der mir so Fälle abfangen könnte?
bei einer Suche leite ich mit "header" so weiter, dass das Suchergebnis ein Pfad wird:
PHP-Code:
if(isset($_GET['search']))
{
header('Location: http://'.$_SERVER['HTTP_HOST'].'/suchbegriff/'.urlencode($_GET['search']).'/');
exit();
}
PHP-Code:
# $suchstring wird aus dem Pfad extrahiert)
else
{
if(strtolower($suchstring) != $suchstring)
{
header('Location: /suchbegriff/'.strtolower($suchstring).'/', true, 301);
}
}
z.B.: "http://www.domain.info/suchbegriff/suchstring/"
Solange keine Sinderzeichen auftreten, ist das alles ganz unproblematisch, kommen aber url-relevante Zeichen (z.B. &, #, ? oder %) funktioniert es natürlich nicht (im günstigensten Fall wird ein Suchbegriff beschnitten, im anderen Fall (z.B. bei "%") erhalte ich die Apachemeldung "Fehlerhafte Anfrage".
Ein bißchen Recherche brachte zum Vorschein, das es im Grunde unmöglich ist zu testen ob ein String url-enkodiert ist, bzw. kann man wohl fehlerhafte Anfragen vermeiden, indem man einen String auf die kritischen Zeichen überprüft (und dann ggf. speziell nur diese enkodiert oder gar rauswirft).
Hat da jemand vielleicht schon eine entsprechende Funktion oder eine evt. einen regulären Ausdruck parat, der mir so Fälle abfangen könnte?
Kommentar