在我的网站中,我有一个表单,其中有一个URL输入字段,因此我想检查用户何时输入url,如以下组合http://example.com或www.example.com或example.com。但我想将http://www.example.com存储在我的数据库中。如何使用PHP而不是使用.htaccess或jquery或javascript验证。
//TrainingDialog associated with save button
trainingDialog = new MessageDialog("trainingdialog", "Warning", "Message contents here",
DialogButtons.OK, DialogIcon.WARN) {
public void onClose(AjaxRequestTarget target, DialogButton button) {
if (button != null && button.match(LBL_OK)) {
target.prependJavaScript("return saveClick()");
saveButton.add(new AttributeModifier("onclick", "return saveClick()"));
target.add(saveButton);
//note: predefined button text are:
//LBL_OK, LBL_CANCEL, LBL_YES, LBL_NO, LBL_CLOSE, LBL_SUBMIT
}
}
};
add(trainingDialog);
以下代码检查了网址验证
// Check, if not have http:// or https:// then prepend it
if (!preg_match('#^http(s)?://#', $url))
{
$url = 'http://' . $url;
}
答案 0 :(得分:1)
<?php
$url = 'http://usr:pss@example.com:81/mypath/myfile.html?a=b&b[]=2&b[]=3#myfragment';
print append_www_to_host($url);
function append_www_to_host($url) {
$parsed_url = url_parse($url);
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : 'http://';
$host = isset($parsed_url['host']) ? startsWith($parsed_url['host'], 'www.') ? $parsed_url['host'] : 'www.' . $parsed_url['host'] : '';
$port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
$user = isset($parsed_url['user']) ? $parsed_url['user'] : '';
$pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : '';
$pass = ($user || $pass) ? "$pass@" : '';
$path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
$query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
$fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
return "$scheme$user$pass$host$port$path$query$fragment";
}
function startsWith($haystack, $needle) {
// search backwards starting from haystack length characters from the end
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
}
?>
请注意以$host
开头的行,这是www.
所在的位置。这应打印出http://usr:pss@www.example.com:81/mypath/myfile.html?a=b&b[]=2&b[]=3#myfragment
。
那就是说,我认为这是一个糟糕的主意,原因很多 - 您可能会使网址无效(例如,如果您的用户输入了m.facebook.com
,那么现在您正在存储{{1} },哪个不存在?)。
答案 1 :(得分:0)
尝试parse_url:http://php.net/manual/en/function.parse-url.php
<?php
$parsed_url = parse_url( $url );
if( $parsed_url == false)
{
// $url is invalid
}
if( $parsed_url['scheme'] != 'http' )
{
$url = 'http://' . $url;
}
但是,这有问题 - 如果网站是https怎么办?或者该网站位于www?
以外的子域上最好通过尝试通过文件命令或Curl加载来检查URL是否存在。
答案 2 :(得分:0)
如果不存在,您需要添加www:
$uri = "http://google.com";
if (preg_match("/http:\/\/(w){3}./" , $uri)) {
echo "It matches...";
} else {
echo "not match, try to add";
if (substr($uri , 0,5) =='https') $uri = str_replace("https://" , "https://www." , $uri); else $uri = str_replace("http://" , "http://www." , $uri);
echo $uri;
}