Autor Zpráva
Ikki
Profil
Zdravím,

narazil jsem na takovou zajímavou věc a potřebuji poradit.
Facebook pro Livestream využívá sdílení přes IFRAME, jenže originální link nepodporuje přehrávání na mobilních zařízeních a je potřeba do odkazu přidat "m.facebook". Jelikož odkazy nechávám zapisovat do databáze, tak bych se chtěl zeptat zda je možnost, jak selectnout zvolený odkaz a upravit jej podle zařízení. Tedy pokud budu na mobilním zařízení, tak se odkaz pro stream změní na výše uvedenou variantu.

Děkuji.
Keeehi
Profil
Ikki:
Ano, možné to je. S čím konkrétně máš problém? Detekce mobilu, vyhledání a nahrazení v řetězci?
Ikki
Profil
Problém mám převážně s tím, že daný odkaz vypisuje podle getnutého ID v tabulce (id, odkaz), ten následně hodím do echa "echo $odkaz" a teď potřebuji aby v podmínce (mám podmínku useragenta na detekci zařízení) detekce mobilu byla v případě detekovaného mobile device upravená verze.

if(!mobiledevice){//normalní odkaz}else{//upravenýodkaz}

Nevím jestli jsem to dobře popsal, ale snad se chápeme :/
Keeehi
Profil
Ikki:
To nebude problém. Jen bych potřeboval vědět přesný příklad toho, co je v proměnné odkaz. Jeden z těch uložených řetězců.
Ikki
Profil
Tohle je odkaz, který mi daroval FB
<iframe src="https://facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fikkinator%2Fvideos%2F657700677920329%2F&show_text=0&width=267" width="267" height="476" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true" allowFullScreen="true"></iframe>

a po změně by měl vypdat nějak takto, asi;

<iframe src="https://m.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fikkinator%2Fvideos%2F657700677920329%2F&show_text=0&width=267" width="267" height="476" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true" allowFullScreen="true"></iframe>
Keeehi
Profil
To není odkaz nýbrž HTML kód ale budiž.
echo preg_replace ('~facebook\.com~' , 'm.facebook.com', $odkaz, 1);
Tohle nahradí první a jedině první výskyt řetězce facebook.com v proměnné za m.facebook.com a vypíše výsledek po nahrazení.
Ikki
Profil
Vyzkouším,
ps: původně tam měl být jen odkaz, ale když jsem zjistil jací jsou lidi dementní, i přes návod "zvolte pouze odkaz", tak mi nic jiného nezbylo.
Keeehi
Profil
Ikki:
A to je problém při ukládání detekovat, zda tam není i ten iframe a případně z něj tu URL vypreparovat?

Pokud někomu dovoluješ vkládat HTML musíš mít ten formulář řádně zabezpečení (proti CSRF) a musíš mu věřit, jelikož je to vlastně dobrovolná perzistentní XSS zranitelnost.
Ikki
Profil
Ještě bych se chtěl zeptat -
Pokud mám v jednom případě uvedený <iframe> v tabulce a v druhém ne, jak mám zapsat podmínku a preg_replace?

Příklad:
https://www.facebook.com/kieselguitars/videos/327158194519116/ (Bez IFRAME je nutno dát do IFRAME)
<iframe src="https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fkieselguitars%2Fvideos%2F327158194519116%2F&show_text=0&width=560" width="560" height="315" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true" allowFullScreen="true"></iframe> (Ponechat a nedávat do IFRAME)

Děkuji.
Keeehi
Profil
Ikki:
$input = "...";

if (filter_var($input, FILTER_VALIDATE_URL)) {
    echo "<iframe src=\"$input\" width=\"560\" height=\"315\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allowFullScreen=\"true\"></iframe>";
} else {
    echo $input;
}

Ovšem mnohem lepší by bylo si při ukládání z toho HTML automaticky tu url vypreparovat a ukládat jen čistou adresu.
Ikki
Profil
No to by určitě bylo, máš nějaký nápad jak na to? Děkuji.
Keeehi
Profil
Tak primitivní verze by mohla vypadat takto
preg_match('~https?://[^"\']+~iu', $s, $matches);
var_dump($matches[0]);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0