允许带有preg-replace的链接

时间:2016-03-21 12:26:09

标签: php preg-replace

到目前为止,我有这个:

preg_replace("/[^a-zA-Z0-9\/!?\" \' :,.;><_ ]/", "", 
html_entity_decode($text, ENT_QUOTES));

如果我使用链接中的其他字符串,那么效果很好 我怎么接受 <script></script> <iframe> <a href=""></a> http:// https://

1 个答案:

答案 0 :(得分:0)

我过去曾使用RegEx做过很多项目,这里有一些我的疑问。

匹配&#34;每个&#34;链接页面。

$links = preg_match_all('#(?:<a\s+.*?href=[\'"]([^\'"]+)[\'"]\s*?.*?>((?:\s*(?!<\s*\/\s*a\s*>).\s*)*)<\s*\/\s*a\s*>)#i',$html,$patterns);

 // $patterns[0] (array) will give you the full tag <a herf="" ...etc
 // $patterns[1] (array) will give you the urls

您应该print_r($patterns)确定实际数组的外观以及您希望如何使用它们。

要匹配<script>代码(这实际上会找到完整的javascript块,这可能不是您要求的),但是您可以修改一些代码。

preg_match_all("#<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>#i",$html,$scripts); 

要匹配<iframe> ,您可以使用此功能(匹配&#34; html中的每个&#34; iframe标记)

function html_iframe_tags($str) 
{
    $iframes = array();
    $iframeSearch = preg_match_all('#(?:<iframe[^>]*)(?:(?:/>)|(?:>.*?</\s*iframe>))#i', $str, $rawiframes);
    if (count($rawiframes[0])<1) return false;

    for ($i = 0; $i < count($rawiframes[0]); $i++)
    {
        $iframes[$i]['tag'] = $rawiframes[0][$i];

        preg_match_all('/src="([^"]*)"/i',$iframes[$i]['tag'], $iframesrc);
        $iframes[$i]['src'] = (isset($iframesrc[1][0]) ? $iframesrc[1][0] : '');

        preg_match_all('/\swidth="([^"]*)"/i',$iframes[$i]['tag'], $iframewidth);
        $iframes[$i]['width'] = (isset($iframewidth[1][0]) ? $iframewidth[1][0] : '');

        preg_match_all('/\sheight="([^"]*)"/i',$iframes[$i]['tag'], $iframeheight);
        $iframes[$i]['height'] = (isset($iframeheight[1][0]) ? $iframeheight[1][0] : '');
    }

    return $iframes;
 }

然后print_r()结果并查看数组如何查找您的确切用法,此函数实际上确定的不仅仅是您的使用,例如宽度/高度等。但还包括src寻找。

希望这些东西可以为你的项目提供方向。

这是一个在html中引用正则表达式的网站 http://www.the-art-of-web.com/php/parse-links/