2016-04-16 7 views
1

Ich benutze die strpos-Funktion, um eine URL zu validieren, die von einem Benutzer gesendet wird, und ich möchte sicherstellen, dass ich nichts vermisse, dass der Benutzer die Validierung umgehen und eine URL, die unangemessen ist, senden kann .PHP strpos Validierung

Als Beispiel, wenn ich nur möchte, dass ein Benutzer eine URL eingeben kann, die mit der Youtube-Domäne verknüpft ist, möchte ich nicht, dass sie einen Platzhalter (*) oder etwas darin einfügen können würde die strpos-Funktion "tricksen".

$url = $request->input('url'); 

// Check if Youtube url is found 

if (strpos($url, 'http://youtube.com') > -1) 
{ 
    // some code  
} 

// some code 

Vielen Dank!

+0

Sie müssen auch URL shorteneners, auch – andrewsi

Antwort

3

strpos gibt false zurück, wenn in einem nicht gefunden Zustand und 0, wenn die Zeichenfolge erscheint in der ersten Spalte, die auch wie false zu PHP aussieht, so wäre es genauer sein === oder !==

$url = $request->input('url'); 
// Check if Youtube url is found 

if (strpos($url, 'http://youtube.com') !== FALSE) 
{ 
    // some code when youtube is found in url 
} 
0

Sie würden besser einen regulären Ausdruck verwenden.

^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$ 

Probieren Sie es aus.

+0

riesigen Hammer zu einer Erdnuss zu knacken – RiggsFolly

+0

Follow @drewsi Kommentar auf die Frage. –

+0

Und was ist mit den anderen 1000 möglichen URL-Verkürzungen, die da draußen sind – RiggsFolly

0

zu verwenden Denken Sie daran, mit Typ Safe-Gleichung zu testen.

strpos finden Sie die Position des ersten Auftretens in der Zeichenfolge. So wenn es eine Übereinstimmung am Anfang der Zeichenfolge (Position 0)

if (strpos($url, 'http://youtube.com') > -1) 

0 zurück, die als false interpretiert werden. Du bist hier in Schwierigkeiten.

Stattdessen Sie gibt es sicher:

if (strpos($url, 'http://youtube.com') !== false) 

Das bedeutet, egal wo in der Zeichenfolge Ihres String gefunden wird, wird es wahr betrachtet werden und Sie wissen, dass es ein Spiel ist.

+0

Nein, 'strpos' gibt entweder die Position des ersten Vorkommens oder' boolean false' zurück. Wir müssen also nur wissen, ob es falsch ist. In jedem anderen Fall ist es "wahr" für uns, Position der Nadel im Heuhaufen. – budwiser