• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

http://-Ergänzung

Status
Für weitere Antworten geschlossen.

Verhueterli

Neues Mitglied
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
    if(!empty($url))
    {
        if(!strpos($url, 'http://') > -1)
            $url = 'http://'.$url;
    }
?>
Kann mir jemand helfen?
 
Werbung:
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;
 
Werbung:
*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</a>)";
            } else {

                echo " (<a href=\"http://".$row['Homepage']."\">Homepage</a>)";
            }
        }

</SPAN>
 
Werbung:
Ok,
PHP:
if(! ( strpos($url, 'http://') > -1) )
... 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.
 
Zuletzt bearbeitet:
php.net-manual schrieb:
Wurde needle nicht gefunden, gibt strpos() den boolean-Wert FALSE zurück.
Das heißt, eine einfacher zu lesende Lösung wäre diese:
PHP:
if (strpos($url, 'http://') === FALSE)
{
    // ....
}
 
Zuletzt bearbeitet:
Werbung:
Es wäre zumindest die elegante Lösung ... aber die wollen doch hier die wenigsten, oder? :twisted:

Gruß,
Jumper, the II.
 
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
 
Werbung:
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;
        }
    }
}
 
Statt
PHP:
 if(strtolower(substr($str, 0, 7)) == "http://")
empfehle ich
PHP:
 if(strncasecmp($str, "http://", 7) == 0)
da dann kein neuer String angelegt werden muss und Kopieroperationen gespart werden, d.h. zweiteres sollte performanter sein.
 
Werbung:
:twisted: Du hast https vergessen .... und ftp ... und ... naja, die anderen sind nicht so wichtig :twisted:

Gruß,
Jumper, the II.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben