$xml = $_GET['url']
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
..
..
如果用户没有使用http或https我的脚本会被破坏,在这种情况下串联是一种很好的验证方法吗?
答案 0 :(得分:0)
最简单的方法是检查字符串开头是否存在http://
或https://
。
if (preg_match('/^http(s)?:\/\//', $xml, $matches) === 1) {
if ($matches[1] === 's') {
// it's https
} else {
// it's http
}
} else {
// there is neither http nor https at the beginning
}
答案 1 :(得分:-1)
您正在使用get
方法。或者这是由AJAX完成的,或者用户在querystring
中附加了一个网址?您没有发布表单?
当网址出错时,连接不会削减它。你需要检查一下。
您可以在页面上添加带占位符的输入,以强制"强制"用户使用http://
。这应该是HTML5的方法。
<input type="text" pattern="^(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$" placeholder="http://" title="URLs need to be proceeded by http:// or https://" >
这应该检查并原谅一些错误。如果网址不符合规范,则会返回错误。用户应该修改他的网址。
$xml = $_GET['url']
$xmlDoc = new DOMDocument();
if (!preg_match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/, $xml ) )
{
echo 'This url is not valid.';
exit;
}
else if (!preg_match(/^http(s)?:\/\/, $xml))
{
//no http present
$orgUrl = $xml;
$xml = "http://".$orgUrl;
//extended to cope with https://
$loaded = loadXML();
if (substr($loaded, 0, 5) == "false")
{
//this attempt failed.
$xml = "https://".$orgUrl;
$loaded = loadXML();
if (substr($loaded, 0, 5) == "false")
{
echo substr($loaded, 6);
exit;
}
}
}
else
{
$loaded = loadXML();
}
function loadXML()
{
try {
return $xmlDoc->load($xml);
}
catch($Ex)
{
return echo 'false Your url could\'t be retrieved. Are you sure you\'ve entered it correctly?';
}
}
您还可以在加载xml:
之前使用curl
检查网址
$ch = curl_init($xml);
// Send request
curl_exec($ch);
// Check for errors and display the error message
if($errno = curl_errno($ch)) {
$error_message = curl_strerror($errno);
echo "$error_message :: while loading url";
}
// Close the handle
curl_close($ch);
重要的注意事项:使用此方法检查网址是否可用并采取相应的操作可能需要很长时间,因为服务器响应可能需要一段时间才能返回。 / p>