按模式

时间:2015-07-07 10:53:30

标签: php url

我有社交书签网站,在这个网站上,用户可以从其他网站提交链接(使用书签栏中的小册子或书签按钮,或直接添加网址)。

用户在浏览器中添加带有书签按钮的链接时,会遇到一些网址问题。包含“&”的网址会出现此问题字符。大多数在Mac或Windows上使用Safari的用户都无法使用书签按钮添加此类链接。

问题是所有带“&”的网址最终得到$isLink = preg_match($pattern, $url); // Returns false(请参阅下面的代码)。

我删除了部分代码(请参阅代码段中的注释),这解决了问题。

但我不想删除此代码。如何解决问题而不删除它?

$url = htmlspecialchars(sanitize($_POST['url'], 3));
$url = str_replace('&', '&', $url);  
$url = html_entity_decode($url);

if (strpos($url,'http')!==0) {
    $url = "http://$url";
}

// check if URL is valid format
$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w]([-\d\w]{0,253}[\d\w])?\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.,\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.,\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.,\/\d\w]|%[a-fA-f\d]{2,2})*)?$/';

// vvv I REMOVED FROM HERE vvv

$isLink = preg_match($pattern, $url); // Returns true if a link

// ^^^ UNTIL HERE ^^^

    if($url == "http://" || $url == "") {
        if(Submit_Require_A_URL == false) {
            $linkres->valid = true;
        } else {
            $linkres->valid = false;
        }

        $linkres->url_title = "";
    } elseif ($isLink == false) {
        $linkres->valid = false;
    } 

网站书签按钮代码为:

javascript:q=(document.location.href);void(open('http://website.com/submit.php?url='+escape(q),'_self','resizable,location,menubar,toolbar,scrollbars,status'));

1 个答案:

答案 0 :(得分:0)

为什么不使用PHP函数“ filter_var()”来检查网址:

$url = $_POST['url'];   
$isLink = filter_var($url, FILTER_VALIDATE_URL);