PHP将<p>围绕字符串放在</p> <div> </div>周围

时间:2014-07-16 08:12:31

标签: php html css str-replace

我们说我发布以下内容:

  

喜欢这条推文   https://twitter.com/yarratrams/status/489336308423491584

然后下面的脚本将运行以下代码的以下部分:

$string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string).$stats->html;

它最终会像以下一样

Love this tweet <a href="https://twitter.com/yarratrams/status/489336308423491584" rel="nofollow" target="_blank">https://twitter.com/yarratrams/status/489336308423491584</a><iframe id="twitter-widget-0" scrolling="no" frameborder="0" allowtransparency="true" class="twitter-tweet twitter-tweet-rendered" title="Embedded Tweet" height="186" style="display: block; max-width: 99%; min-width: 220px; padding: 0px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; margin: 10px 0px; border-color: rgb(238, 238, 238) rgb(221, 221, 221) rgb(187, 187, 187); border-width: 1px; border-style: solid; box-shadow: rgba(0, 0, 0, 0.14902) 0px 1px 3px; position: static; visibility: visible; width: 500px;"></iframe>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>   

我想在<p></p>中加入以下部分:

  

喜欢这条推文https://twitter.com/yarratrams/status/489336308423491584

所以最终结果应该是这样的

<p>Love this tweet <a href="https://twitter.com/yarratrams/status/489336308423491584" rel="nofollow" target="_blank">https://twitter.com/yarratrams/status/489336308423491584</a></p><iframe id="twitter-widget-0" scrolling="no" frameborder="0" allowtransparency="true" class="twitter-tweet twitter-tweet-rendered" title="Embedded Tweet" height="186" style="display: block; max-width: 99%; min-width: 220px; padding: 0px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; margin: 10px 0px; border-color: rgb(238, 238, 238) rgb(221, 221, 221) rgb(187, 187, 187); border-width: 1px; border-style: solid; box-shadow: rgba(0, 0, 0, 0.14902) 0px 1px 3px; position: static; visibility: visible; width: 500px;"></iframe>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>              </div>

当有人发表评论并包含推文,YouTube或Vimeo链接或将图片上传到我们的亚马逊服务器时,我目前正在执行以下操作:

function autolink($string,$uid = null){
    // force http: on www.
    $string = str_ireplace( "twitter.com", "http://twitter.com", $string );
     $string = str_ireplace( "http://twitter.comhttp://twitter.com", "http://twitter.com", $string );
    $string = str_ireplace( "www.", "http://", $string );
    $string = str_ireplace( "http://http://", "http://", $string );
    // eliminate duplicates after force
    $string = str_ireplace( "http://http://www.", "http://", $string );
    $string = str_ireplace( "https://http://www.", "https://", $string );

    // The Regular Expression filter
    $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
    // Check if there is a url in the text

    $m = preg_match_all($reg_exUrl, $string, $match); 

    if ($m) { 
        $links=$match[0]; 
        for ($j=0;$j<$m;$j++) { 

            if(substr($links[$j], 0, 14) == 'http://youtube'){

            $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string).'<div class="embed-container"><iframe src="//www.youtube.com/embed/'.substr($links[$j], -11).'" frameborder="0"></iframe></div>';

            }
            elseif(substr($links[$j], 0, 12) == 'http://vimeo'){

            $status = file_get_contents("http://vimeo.com/api/oembed.json?url=".$links[$j]);
            $vim = json_decode($status);
            $embed = preg_replace(array('/width="\d+"/i', '/height="\d+"/i'),array('', ''),$vim->html);
            //$string = "https://api.twitter.com/1/statuses/oembed.json?url=".$links[$j];
            $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string)."<div class='embed-container'>".$embed."</div>";

            }
            elseif(substr($links[$j], 0,16) == 'http://au.images')
            {

            $string=str_replace($links[$j],null,$string).'<div class="imgover"><a href="'.$links[$j].'" data-rel="shadowbox['.rand(0,57475676).']"><img alt="'.$links[$j].'" src="'.$links[$j].'"></a></div>';

            }
            elseif(substr($links[$j], 0,16) == 'http://instagram')
            {
                http://api.instagram.com/oembed?url=http://instagram.com/p/V8UMy0LjpX/
                $status = file_get_contents("http://api.instagram.com/oembed?url=".$links[$j]);
                $stats = json_decode($status);
            //$string = "https://api.twitter.com/1/statuses/oembed.json?url=".$links[$j];
            if(isset($stats->errors))
            {

            }
            else
            $string=str_replace($links[$j],'<a href="'.$links[$j].'" target="_blank">'.$links[$j].'</a>',$string).'</p><div class="imgover"><a href="'.$stats->url.'" data-rel="shadowbox['.rand(0,57475676).']"><img  alt="'.$links[$j].'" src="'.$stats->url.'" ></a></div>';


            }
            elseif(substr($links[$j], 0, 15) == 'https://twitter'){

            $status = file_get_contents("https://api.twitter.com/1/statuses/oembed.json?url=".$links[$j]);
            $stats = json_decode($status);
            //$string = "https://api.twitter.com/1/statuses/oembed.json?url=".$links[$j];
            if(isset($stats->errors))
            {

            }
            else
            $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string).$stats->html;

            }
            else{
            $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string);
            } 
        } 
    } 

但是我的问题是我想在未更改的字符串周围放置一个<p></p> - 就像我在外部div上放置填充一样,它似乎移动了所有内部DIV,这是修复它的一种方法是将<p></p>仅放在修改后的字符串之前的文本中。

2 个答案:

答案 0 :(得分:0)

@thx给Daniel Sirakoff 这是使用他评论的代码

后的正确代码
   $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>','<p>'.$string.'</p>').'<div class="twitterembed">'.$stats->html.'</div>';

答案 1 :(得分:-1)

您好,您可以像echo '<p>'.$string.'</p>';

那样连接