[PHP] Hjälp sökes - Länkfilter

Permalänk
Avstängd

[PHP] Hjälp sökes - Länkfilter

Hej, jag har nyligen börjat med php så mina kunskaper inom det området är inte det största, försöker få till så att användarna bara kan lägga in länkar som börjar på http://youtube.com/ och sedan kan fortsätta hur som helst i ett textfält (så att man bara kan posta länkar till sina youtube videos till exempel). Så alltså om någon försöker med någon annan länk, tex google.se ska dom få en error

Någon som vet hur jag ska kunna lösa detta?

Tack på förhand!

Visa signatur

Var trevliga

Permalänk
Permalänk
Medlem

Regexp är trevligt men lite väl avancerat för en nybörjare. Även onödigt i detta fall.

Eftersom alla youtube länkar börjar med http://youtube.com eller http://www.youtube.com så räcker det att kolla just det.
Det kan man använda stripos för.

if(stripos($input, "http://youtube.com") === 0 OR stripos($input, "http://www.youtube.com") === 0) { //Youtube länk! } else { //Error }

Visa signatur

Programmerare -> PHP | HTML | CSS | JS | Java.

Permalänk
Inaktiv

Notera att länkarna inte tvunget börjar med http://youtube.com eller http://www.youtube.com.
Godtyckliga länkar är ju även https://youtube.com, https://www.youtube.com, http://m.youtube.com samt https://m.youtube.com.

Den mobila varianten (m.youtube.com) är visserligen väldigt dålig och kanske inte behöver stödjas.

Sen har youtube.com även en massa underdomäner för olika länder, dessa redigerar dock endast trafiken till youtube.com och ändrar språket så de behöver man kan inte ta hänsyn till.

Permalänk
Skrivet av Sony?:

Regexp är trevligt men lite väl avancerat för en nybörjare. Även onödigt i detta fall.

Eftersom alla youtube länkar börjar med http://youtube.com eller http://www.youtube.com så räcker det att kolla just det.
Det kan man använda stripos för.

if(stripos($input, "http://youtube.com") === 0 OR stripos($input, "http://www.youtube.com") === 0) { //Youtube länk! } else { //Error }

Som jag förstod det så ville TS kontrollera att strängarna började med "http://youtube.com/".
Med stripos() så fungerar, som havsmonstret påpekade, även "https://youtube.com" eller
"http://somesite.com/search?q=http://youtube.com/".

Permalänk
Medlem

hmm, det här borde funka:

if (preg_match ('@^(http|https)://[a-z\.]*(youtube\.com|youtu\.be)/@', $link)) { echo 'Success!'; }

Om du bara vill ha http://youtube.com, utan diverse subdomäner, länkar med https eller länkar till youtu.be (som används av Youtube) så fungerar den här mycket enklare koden:

if (preg_match ('@^http://youtube\.com/@', $link)) { echo 'Success!'; }

Permalänk
Medlem
Skrivet av mel0dy:

Som jag förstod det så ville TS kontrollera att strängarna började med "http://youtube.com/".
Med stripos() så fungerar, som havsmonstret påpekade, även "https://youtube.com" eller
"http://somesite.com/search?q=http://youtube.com/".

Stripos returnerar vilken position strängen hittas på. Om "http://youtube.com" hittas i början, alltså position 0, returneras 0.

Om strängen hittas längre bak returneras ett högre nummer, finns den inte alls returneras FALSE.

Så min kod funkar korrekt. Dock sant att youtube har många URLer.

Visa signatur

Programmerare -> PHP | HTML | CSS | JS | Java.

Permalänk

parse_url och parse_str är funktioner värt sin vikt i guld många gånger när de kommer till youtube och andra url hanteringar. Kan du enkelt få fram vad v variabeln i länken är också om du vill göra länkarna embedded på ett smidigt sätt.

http://php.net/manual/en/function.parse-url.php