· 14.06.2007 · 01:31:46 ·

http entfernen


Was macht man bei einem Gästebuch oder einem Webkatalog mit der URL die der User einträgt?

Wie geht man damit um, das manchmal das http dabei und manchmal nicht dabei ist?

Das entscheidente Problem ist später wenn man die Daten wieder ausgibt.

Geht man dafon aus das es immer so oder so ist, dem ist aber nicht so, generiert man Links die nicht funktionieren.
Manche haben dann kein http und sind teschnich intern, aber diese interne Seite gibt es nicht. Oder der Link beginnt mit http://http:// was auch nicht funktioniert.


$domain=trim($_POST['domain']);


if ( substr($domain,0,7)=='http://') $domain=substr($domain,7);
if ( substr($domain,0,4)=='www.' ) $domain=substr($domain,4);


$domain = strtok($domain,'/');
$url = strtok( '');


$domainmit = "http://www.$domain/$url";
$domainohne = "http://$domain/$url";


für den Fall das vielleicht noch ein Leerzeichen ganz links ist, machen wir vorsichtshalber einen "trim".

Dann prüfen wir mit "SubStr" ob es ein httpDingens gibt. Wenn ja, dann schneiden wir es ab.
Dum nur, wenn der User die URL via Copy&Paste aus der URLzeile holt und es eine https ist. Aber da kann man ja leicht eine zusätzliche Prüfung einfügen.
Und was wenn dieses http vielleicht HTTP geschrieben ist?

Vielleicht kein Fehler, wenn man erstmal alle Buchstaben in kleine umwandelt.

$domain=trim( strtolower($_POST['domain']) );


if ( substr($domain,0,8)=='https://') $domain=substr($domain,8);
if ( substr($domain,0,7)=='http://') $domain=substr($domain,7);
if ( substr($domain,0,4)=='www.' ) $domain=substr($domain,4);


$domain = strtok($domain,'/');
$dummy = strtok( '');

Den Teil hinter der Domain sollten wir jetzt aber nicht mehr weiter verwenden.
Denn, wenn es dort Großbuchstaben gab, gibt es die jetzt nicht mehr, also ist /Path/File.html nicht mehr richtig.


Aller guten Dinge sind 3

$DOhttp = strtok($_POST['domain'],'/');
$DOname = strtok( '/');
$DOfile = strtok( '');


$DOhttpCheck = strtolower($DOhttp);


if ( substr($DOhttpCheck,0,4)=='http')
{
// das war eine URL mit HTTP
}
elseif ( substr($DOhttpCheck,0,3)=='ftp')
{
// huch, oh Schreck, ein FTP ....
}
else
{
// ich weiss nicht ich weiss nicht
// welches Protokol


// oder war da garkein Protokol?
// dann steht der Domainname nicht in $DOname
$DOfile = $DOname;
$DOname = $DOhttp;
$DOhttp = '';
// jetzt sollte es stimmen
}


// Dateiname noch leermachen fals es keinen gab ...
// ... nur ein Slash
if ( $DOfile == '/' ) $DOfile = '';


Mann, oder auch Frau, könnte jetzt noch mit "strrpos" im DOfile nach einem Slash suchen und wenn einer gefunden dann den Path extrahieren.

$DOpath = '';


if ( $DOpathlen = strrpos($DOfile,'/') )
{
$DOpath = substr($DOfile,0,$DOpathlen);
$DOfile = substr($DOfile,$DOpathlen+1);
}



Neues Problem

$link = "http://$DOname/$DOpath/$DOfile";

kann "Domain.tld//datei.html" ergeben

Entweder
$link  = "http://$DOname";
$link .= str_replace('//','/',"/$DOpath/$DOfile");

oder
$link  = "http://$DOname";
if ( strlen($DOpath) )
$link .= "/$DOpath";
$link .= "/$DOfile";

oder
$DOpath = '';


if ( $DOpathlen = strrpos($DOfile,'/') )
{
$DOpath = substr($DOfile,0,$DOpathlen+1);
$DOfile = substr($DOfile,$DOpathlen+1);
} $link = "http://$DOname/$DOpath$DOfile");


alte Erde: HTML PHP Handbuch & Tutor Webmaster Tools ·|· TV Serie Film Filmfiguren Promi