如何从字符串中替换所有链接

时间:2016-12-16 18:09:07

标签: php

最近我开始编写一些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替换所有网址并以此方式或其他方式进行链接? 谢谢你的建议。

1 个答案:

答案 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]);
    }
?>