Hallo!
In meinem Skript soll überprüft werden, ob bei einer Angabe ein ‚http://‘ vorkommt, wenn nicht, soll dieses eingefügt werden.
Ich dachte mir da folgendes, funktioniert aber leider nicht:
[PHP]
[/PHP]
Kann mir jemand helfen?
Hallo!
In meinem Skript soll überprüft werden, ob bei einer Angabe ein ‚http://‘ vorkommt, wenn nicht, soll dieses eingefügt werden.
Ich dachte mir da folgendes, funktioniert aber leider nicht:
[PHP]
[/PHP]
Kann mir jemand helfen?
mahlzeit, vllt. kannst du damit was anfangen
[PHP]
$url = parse_url($string);
$host = $url[‚host‘];
$host = explode(„.“,$host);
// Normale Domain (www.google.de) oder (subdom.google.de)
if(strlen($host[0]) > 0 AND strlen($host[2]) > 0) {
if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$host[1]))) {
if(!function_exists('checkdnsrr')) {
$ho = $host[1].".".$host[2];
function checkdnsrr($ho, $type = '') {
if(!empty($ho)) {
if($type == '') $type = "MX";
@exec("nslookup -type=$type $ho", $output);
while(list($k, $line) = each($output)) {
if(eregi("^$ho", $line)) {
return true;
}
}
return false;
}
}
}
if(checkdnsrr($host[1].".".$host[2].'.', 'MX') ) return true;
if(checkdnsrr($host[1].".".$host[2].'.', 'A') ) return true;
if(checkdnsrr($host[1].".".$host[2].'.', 'CNAME') ) return true;
}else { return false; }
// Normale Domain ohne www (google.de) oder (google.de)
}elseif(strlen($host[0]) > 0 AND strlen($host[2]) == 0) {
if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$host[0]))) {
if(!function_exists('checkdnsrr')) {
$ho = $host[0].".".$host[1];
function checkdnsrr($ho, $type = '') {
if(!empty($ho)) {
if($type == '') $type = "MX";
@exec("nslookup -type=$type $ho", $output);
while(list($k, $line) = each($output)) {
if(eregi("^$ho", $line)) {
return true;
}
}
return false;
}
}
}
if(checkdnsrr($host[0].".".$host[1].'.', 'MX') ) return true;
if(checkdnsrr($host[0].".".$host[1].'.', 'A') ) return true;
if(checkdnsrr($host[0].".".$host[1].'.', 'CNAME') ) return true;
}else { return false; }
}else { return false; }
return false;
[/PHP]
Nein, kann ich nicht.
goil Dann empfehle ich → Gesuche … für mundgerechten PHP-Code … :twisted:
Gruß,
Jumper, the II.
Nein im Ernst … überlege mal und definiere mal die Rahmenbedingungen.
a) Willst du die URL komplett checken oder wirklich nur prüfen, ob z.B. ein https://bla z.B. mit http:// beginnt und ggf. erweitern.
und b) die Negation eines Zahlenwertes !a bedingt, dass bei Dir mit der Formel !a > -1 a mindestens -1 oder kleiner sein muss … Habe gerade die Negationsfunktion in PHP für Zahlen nicht im Kopf … :mrgreen:
Ist doch nicht so schwer zu verstehen.
Der User gibt eine URL ein, das Skript soll überprüfen, ob der User bei der eingegebenen URL ‚http://‘ benutzt hat. Wenn er das nicht getan hat, soll ‚http://‘ automatisch in die Eingabe eingefügt werden.
Mit b) magst du wohl recht haben, andere Methoden wie z.B. strpos($url, ‚http://‘) < 0 o.Ä. funktionieren aber auch nicht.
Versuch es hiermit:
[php]
if(trim($row[‚Homepage‘]) != „“) {
if(strtolower(substr($row[‚Homepage‘], 0, 7)) == „http://“) {
echo " (<a href="„.$row[‚Homepage‘].“">Homepage)";
} else {
echo " (<a href=\"http://".$row['Homepage']."\">Homepage</a>)";
}
}
[/php]
Ok, [PHP]if(! ( strpos($url, ‚http://‘) > -1) ) [/PHP] … Die Klammern machen es beim ! … ! hat eine höhere Priorität als >.
Gruß,
Jumper, the II.
JumperII, vielen Dank. So funktioniert es.
P.S. An die Lösung habe ich auch schon gedacht, komischerweise habe ich aber nicht daran gedacht, dass sie auch funktionieren könnte O_o
Edit
Das hier ist kein Showcase, wo jeder seine Variante präsentieren soll.
Das heißt, eine einfacher zu lesende Lösung wäre diese:[PHP]if (strpos($url, ‚http://‘) === FALSE)
{
// …
}[/PHP]
Es wäre zumindest die elegante Lösung … aber die wollen doch hier die wenigsten, oder? :twisted:
Gruß,
Jumper, the II.
Eher:
[PHP]if (!strpos($url, ‚http://‘)) […][/PHP]
Is noch kürzer
(Python hat seine Spuren hinterlassen )
Die noch kürzere Variante funtktioniert leider nicht, da PHP die Zahl ‚0‘ in einen Wahrheitswert umwandelt und dann u.U. nicht das gewünschte Ergebnis rauskommt.
Genauer: Es gilt 0 == false, aber nicht 0 === false, da in dem Fall keine automatische Typumwandlung vorgenommen wird.
Zu Problemen führt das dann, wenn der gesuchte String am Anfang der Zeichenkette steht, da strpos(‚abc‘, ‚a‘) als Rückgabe den Wert 0 hat, da es das erste Zeichen im String ist.
Das steht auch in der Warnung auf der Seite http://de2.php.net/manual/de/function.strpos.php
gut, issn Argument :roll:
Daran hab ich nich gedacht. Sry
Ich mach das so
[PHP]
function http($str) {
if(trim($str) != „“) {
if(strtolower(substr($str, 0, 7)) == „http://“) {
return $str;
} else {
$str = „http://“.$str;
return $str;
}
}
}
[/PHP]
Statt
[php]
if(strtolower(substr($str, 0, 7)) == „http://“)[/php] empfehle ich
[php]
if(strncasecmp($str, „http://“, 7) == 0)[/php] da dann kein neuer String angelegt werden muss und Kopieroperationen gespart werden, d.h. zweiteres sollte performanter sein.
:twisted: Du hast https vergessen … und ftp … und … naja, die anderen sind nicht so wichtig :twisted:
Gruß,
Jumper, the II.
ich denke, die wird er nicht brauchen, ansonsten fügt er sie schon noch ein. Er weiß ja, wie es geht.
Greetz