我有社交书签网站,在这个网站上,用户可以从其他网站提交链接(使用书签栏中的小册子或书签按钮,或直接添加网址)。
用户在浏览器中添加带有书签按钮的链接时,会遇到一些网址问题。包含“&”的网址会出现此问题字符。大多数在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'));
答案 0 :(得分:0)
为什么不使用PHP函数“ filter_var()”来检查网址:
$url = $_POST['url'];
$isLink = filter_var($url, FILTER_VALIDATE_URL);