Jump to content
php.lv forumi

Kā validēt YouTube embed kodu


Endijs

Recommended Posts

Ja es gribu lietotājam dot iespēju pievienot YouTube video ar embedošanas kodu, piemēram:

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/yyyyyyyyyy"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/yyyyyyyyyy" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

 

kā to izdarīt droši? T.i. - kā pārbaudīt ka tur ir tikai tas kas vajadzīgs un ka nav kaut kādi neveselīgi skripti (nelabi ceļi) ielikti?

 

Idejas? Varbūt kaut kā citādi YouTube video ievietošanu realizēt? Jāatcerās, ka video varēs likt jebkurš - tātad lietotājam noteikti nedrīkst ticēt un paļauties, ka viņš ievadīs tikai labas lietas.

Link to comment
Share on other sites

Būtībā visizdevīgāk ir taisīt ar pregmaču. Es uztaisīju tā (te būs gan vimeo, gan youtube):

<?php
$pattern = array(
 '/<object\s+width="(\d+)" height="(\d+)".+(http:\/\/www\.youtube\.com\/v\/([A-Za-z0-9\-_&]+)).+<\/object>/s',
 '/<object\s+width="(\d+)" height="(\d+)".+(http:\/\/vimeo\.com\/moogaloop\.swf\?([A-Za-z0-9\-_&;=\.]+)).+<\/object>.*/'
);

function validate_embed($code, $patternArr) {
$code = html_entity_decode($code);
  if (is_array($patternArr)) {
 foreach($patternArr as $pattern) {
if(preg_match($pattern, $code, $vars)) {
  $data = serialize($vars); 
	  break;
}
 }
 return isset($data) ? $data : FALSE;
}
echo "kaut kas ne tā";
return FALSE;
}

?>

 

Kad izmanto funkciju, atdod atpakaļ serializētu masīvu, kuru var grūst iekš db. Lai tiktu pie datiem, vajag izmantot

<?php $dati = unserialize($dati); ?>

Video ielikšana pēc tam ir vienkārša, izmantojot jQuery + flashembed (http://flowplayer.org/tools/flashembed.html) ar sekojošu kodu

$(document).ready(function(){	
$("#flashembed").flashembed({
	src: <?=$dati[3]?>,
	width: <?=$dati[1]?>,
	height: <?=$dati[2]?>
});
});

#flashembed ir jebkurš html konteineris

src, width un height tiek padoti no augšā iegūtajiem.

 

Nu kaut kā tā...

 

Lūdzu! No alus neatteikšos :D

Link to comment
Share on other sites

koko, a man tavs kods gadījumā neļaus ielikt ko šādu tavā lapā?

<object width="425" height="344"><param name="movie" value="http://evilsite.com/evil_flash_code"></param><param name="dummy" value="http://www.youtube.com/v/yyyyyyyyyy"></param>...<embed src="http://evilsite.com/evil_flash_code" ...></embed></object>

Link to comment
Share on other sites

koko, a man tavs kods gadījumā neļaus ielikt ko šādu tavā lapā?

<object width="425" height="344"><param name="movie" value="http://evilsite.com/evil_flash_code"></param><param name="dummy" value="http://www.youtube.com/v/yyyyyyyyyy"></param>...<embed src="http://evilsite.com/evil_flash_code" ...></embed></object>

 

bubu, manā lapā nē, jo es noklusēju by default nonesu nost pirmo mainīgo ar

unset($vars[0])

. Man beigās paliek pliki mainīgie, kas vairāk kā youtube neņem.. Ja tomēr ir kāda iespēja, ka var paņemt mani priekšā, tad dalies pārdomās!

Link to comment
Share on other sites

Es gan darīju tā, ka liku lietotājam norādīt saiti uz video, nevis embed kodu, tb http://www.youtube.com/watch?v=x un izvadi saformatēju pats (šobrīd gan ir savādāk, jo, šķiet, ka plejerim vairs nav viens konstants izmērs).

Ja iedotais links aizved uz nevalidu video, tad notiks tikai tas, ka youtube plejeris sāks bļaut, ka video neeksistē. Protams, pie ievades var pārbaudīt vai konkrētais links ir derīgs (video eksistē), kaut vai file_get_contents($vide_url) + preg_match(). Pieļauju domu, ka youtube api arī ir iespēja validēt video id.

Link to comment
Share on other sites

Kāpē jāļauj pievienot viss tas penteris? Ļauj pievienot tikai linku (http://www.youtube.com/watch?v=yyyyyyyyyy), un pēcāk to attiecīgi apstrādā.

A lai cilvēkam būtu mānīgs iespaids, ka viņš kaut ko var kontrolēt :D. Kā arī, lai noskaidrotu filmas izmēra parametrus.

Edited by koko
Link to comment
Share on other sites

Man atkal ir šāds variants.

$links = substr($_POST['embedkods'], 85, 11);

Šādi dabū tikai video id un tad lai izvadiitu noteiktaa embed kodaa atliek tik ielikt id. Video izmērs nemainīgs.

<param name='movie' value='http://www.youtube.com/v/".$klips->links."&hl=en&fs=1'>

Edited by LoyC
Link to comment
Share on other sites

Man atkal ir šāds variants.

$links = substr($_POST['embedkods'], 85, 11);

Šādi dabū tikai video id un tad lai izvadiitu noteiktaa embed kodaa atliek tik ielikt id. Video izmērs nemainīgs.

<param name='movie' value='http://www.youtube.com/v/".$klips->links."&hl=en&fs=1'>

 

un kas notiks gadījumā ja tev tajā $_POST['embedkods'] sākot no 85. simbola būs kaut kas šitāds?

'><b>kaka<

 

labi, 11 simboli nav daudz, bet tas vienalga ir CAURUMS :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...