Zend URL验证失败

时间:2013-12-17 01:08:51

标签: php validation url zend-framework

我正在运营购物代理网站以接受用户的订单。一个关键步骤是允许用户向我发送他们想要订购的物品的URL(来自一个名为taobao的海外网站,不发货到澳大利亚),所以我可以订购它们。

由于我收到了许多错误的网址,我认为在用户提交订单之前添加网址验证可能是个好主意。我正在使用Zend框架,所以我只使用Zend提供的URI检查器:

// allow unwise characters in URL, used in user input URL validation
Zend_Uri::setConfig(array('allow_unwise' => true));

// add http:// or https:// if not present
if ( strlen($tblurl[$rowid]) > 7 )
{

if ( ( substr($tblurl[$rowid],0,7) != 'http://' ) && ( substr($tblurl[$rowid],0,7) != 'https:/' ) )
{
$tblurl[$rowid] = 'http://'.$tblurl[$rowid];
}

}

// Check if URL is valid
$isValidURL = Zend_Uri::check($tblurl[$rowid]);

此处唯一的预处理是添加http://或https://如果用户错过(因为“www.chinabuy.com.au”将返回无效但“http://www.chinabuy.com.au”将返回有效)。

我收到了几封来自客户的电子邮件,抱怨他们收到了网址验证失败错误消息。我真的没有看到我在哪里做错了,我一直在用许多看起来很奇怪的URL测试它,但似乎代码按预期工作。

有什么想法吗?我的网站是https://www.chinabuy.com.au/order,因此您可以对其进行测试(只需直接下订单详细信息,输入一些网址并点击提交。如果出现错误消息“每个项目必须有一个有效的网址。”那么它表示验证失败。

谢谢!

修改 正如@ArendE所建议的,我已经更新了我的代码并将新代码放在我的网站上:

$tblurl[$rowid] = trim($tblurl[$rowid]);
// Check if the url contain the words http:// or https://
if (stripos($tblurl[$rowid],'http://') === false && stripos($tblurl[$rowid],'https://') === false) {
  $tblurl[$rowid] = 'http://' . $tblurl[$rowid];
}
$isValidURL = Zend_Uri::check($tblurl[$rowid]);

1 个答案:

答案 0 :(得分:0)

https:/(缺少斜杠)有一个拼写错误。我建议你改变检查网址的方式;或者在输入网址上使用trim(它可能包含空格,制表符,换行符等)。如果您没有其他URL作为GET变量,则下面是您可以使用的脚本。

Zend_Uri::setConfig(array('allow_unwise' => true));

// Check if the url contain the words http:// or https://
if(strpos($tblurl[$rowid],'http://') !== false || strpos($tblurl[$rowid],'https://') !== false) {
   $isValidURL = Zend_Uri::check($tblurl[$rowid]);
} else {
   $isValidURL = Zend_Uri::check('http://' . $tblurl[$rowid]);
}