最近我开始编写一些php,所以我还是一个新手,也许这是一个非常简单的问题,请原谅我,如果是这样,因为我找不到任何解决方案这个问题。
我有这段代码,我希望将所有youtube链接替换为iframe,将其余的url替换为普通链接,但它似乎无法正常工作,我无法找到错误。
<?php
if (strpos($text[$i], 'youtube.com') !== false) {
$text[$i] = preg_replace('/\s*[a-zA-Z\/\/:\.]*youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i','<iframe width=\"420\" height=\"315\" src="http://youtube.com/embed/$1\" allowfullscreen></iframe>', $text[$i]);
} else {
$text[$i] = preg_replace('#(\A|[^=\]\'"a-zA-Z0-9])(http[s]?://(.+?)/[^()<>\s]+)#i', '\\1<a target="_blank" href="\\2">\\3</a>', $text[$i]);
} ?>
<div class="post">
<?php print $author[$i]; ?>
<?php print $time[$i]; ?>
<?php print $text[$i]; ?>
</div>
$ text [$ i] 在sql数据库上返回不同的文本记录。
是否可以用iframe替换所有网址并以此方式或其他方式进行链接? 谢谢你的建议。
答案 0 :(得分:0)
假设$text[$i]
的值是标准的www.youtube.com/watch=v?
链接,看起来你已经将一些.htaccess与PHP结合起来了。如果你打算这个
<iframe src="http://youtube.com/embed/$1\">
要加载代替$1\
的内容,它将无效,因为$1\
被识别为字符串的一部分而不是变量。您需要在watch=v?
之后删除字符串,将其存储在$needle
(或任何您想要的内容)中,然后src="http://youtube.com/embed/'.$needle.'"
1。快速而肮脏的解决方案:
<?php
if (strpos($text[$i], 'youtube.com') !== false) {
$needle = explode("watch=v?",$text[$i]);
$text[$i] = str_replace($text[$i], '<iframe width=\"420\" height=\"315\" src="http://youtube.com/embed/'.$needle[1].'" allowfullscreen></iframe>', $text[$i]);
}
?>
爆炸(从分隔的字符串创建数组)将$text[$i]
拆分为$needle
制作$needle[1] = "youtube-video-id"
。这就是$needle[1]
<iframe src="http://youtube.com/embed/'.$needle[1].'">
的原因
这不会让你只是视频ID。 $needle[1]
是watch=v?
$text[$i]
之后发生的任何内容,因此请牢记这一点。
ETA:您可以更进一步,使用包含字符串“https://www.youtube.com/”的$text[$i]
来保留$needle[0]
的http或https。 注意:如果您的网站为https且iframe src为http,则会引发跨网站脚本错误。
$text[$i] = str_replace($text[$i], '<iframe width=\"420\" height=\"315\" src="'.$needle[0].'embed/'.$needle[1].'" allowfullscreen></iframe>', $text[$i]);
2。更好的解决方案:
假设该链接是常用的https://www.youtube.com/watch=v?asdf1234
,您可以将watch=v?
替换为embed/
<?php
if (strpos($text[$i], 'youtube.com') !== false) {
$needle = str_replace("watch=v?","embed/",$text[$i]);
$text[$i] = str_replace($text[$i], '<iframe width=\"420\" height=\"315\" src="'.$needle.'" allowfullscreen></iframe>', $text[$i]);
}
?>