$myoutput
변수에 저장된 문자열에 유효한 링크 구문이 포함되어 있는지 아니면 일반 텍스트 인지 PHP를 사용하여 확인하고 싶습니다 . 내가 찾고있는 기능이나 솔루션은 GET 매개 변수가있는 것을 포함하여 모든 링크 형식을 인식해야합니다.
많은 경우 실제로 CURL 또는 file_get_contents()
함수를 사용하여 문자열을 쿼리하는 솔루션 은 가능하지 않으므로 피하고 싶습니다.
정규식이나 다른 해결책에 대해 생각했습니다.
$myoutput
변수에 저장된 문자열에 유효한 링크 구문이 포함되어 있는지 아니면 일반 텍스트 인지 PHP를 사용하여 확인하고 싶습니다 . 내가 찾고있는 기능이나 솔루션은 GET 매개 변수가있는 것을 포함하여 모든 링크 형식을 인식해야합니다.
많은 경우 실제로 CURL 또는 file_get_contents()
함수를 사용하여 문자열을 쿼리하는 솔루션 은 가능하지 않으므로 피하고 싶습니다.
정규식이나 다른 해결책에 대해 생각했습니다.
답변:
기본 필터 검사기를 사용할 수 있습니다
filter_var($url, FILTER_VALIDATE_URL);
선택적으로 필요한 구성 요소를 사용 하여 값을 URL ( http://www.faqs.org/rfcs/rfc2396 에 따라)로 확인합니다 . 유효한 URL이 HTTP 프로토콜 http : //를 지정하지 않을 수 있으므로 URL이 예상 프로토콜 (예 : ssh : // 또는 mailto :)을 사용하는지 확인하려면 추가 검증이 필요할 수 있습니다. 이 함수는 유효한 ASCII URL 만 찾습니다. 국제화되지 않은 도메인 이름 (비 ASCII 문자 포함)이 실패합니다.
예:
if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
die('Not a valid URL');
}
FILTER_VALIDATE_URL
의 URL의 프로토콜을 확인하지 않습니다. 그래서 ssh://
, ftp://
등 전달합니다.
내가 찾은 최고의 튜토리얼은 다음과 같습니다.
http://www.w3schools.com/php/filter_validate_url.asp
<?php
$url = "http://www.qbaki.com";
// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validate url
if (filter_var($url, FILTER_VALIDATE_URL) !== false) {
echo("$url is a valid URL");
} else {
echo("$url is not a valid URL");
}
?>
가능한 플래그 :
FILTER_FLAG_SCHEME_REQUIRED - URL must be RFC compliant (like http://example)
FILTER_FLAG_HOST_REQUIRED - URL must include host name (like http://www.example.com)
FILTER_FLAG_PATH_REQUIRED - URL must have a path after the domain name (like www.example.com/example1/)
FILTER_FLAG_QUERY_REQUIRED - URL must have a query string (like "example.php?name=Peter&age=37")
!filter_var(...) === false
==> filter_var(...) === true
또는 just filter_var(...)
. :)
ttps://www.youtube.com
유효한 것으로 확인
ASCII가 아닌 문자가 포함 된 URL의 경우 filter_var () 사용이 실패합니다 (예 : ( http://pt.wikipedia.org/wiki/Guimarães ). 다음 함수는 filter_var ()를 호출하기 전에 ASCII가 아닌 모든 문자 (예 : http://pt.wikipedia.org/wiki/Guimar%C3%A3es )를 인코딩합니다 .
이것이 누군가를 돕기를 바랍니다.
<?php
function validate_url($url) {
$path = parse_url($url, PHP_URL_PATH);
$encoded_path = array_map('urlencode', explode('/', $path));
$url = str_replace($path, implode('/', $encoded_path), $url);
return filter_var($url, FILTER_VALIDATE_URL) ? true : false;
}
// example
if(!validate_url("http://somedomain.com/some/path/file1.jpg")) {
echo "NOT A URL";
}
else {
echo "IS A URL";
}
개인적으로 나는 정규 표현식을 사용하고 싶습니다. 벨로우 코드는 완벽하게 작동했습니다.
$baseUrl = url('/'); // for my case https://www.xrepeater.com
$posted_url = "home";
// Test with one by one
/*$posted_url = "/home";
$posted_url = "xrepeater.com";
$posted_url = "www.xrepeater.com";
$posted_url = "http://www.xrepeater.com";
$posted_url = "https://www.xrepeater.com";
$posted_url = "https://xrepeater.com/services";
$posted_url = "xrepeater.dev/home/test";
$posted_url = "home/test";*/
$regularExpression = "((https?|ftp)\:\/\/)?"; // SCHEME Check
$regularExpression .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass Check
$regularExpression .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Host or IP Check
$regularExpression .= "(\:[0-9]{2,5})?"; // Port Check
$regularExpression .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path Check
$regularExpression .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query String Check
$regularExpression .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor Check
if(preg_match("/^$regularExpression$/i", $posted_url)) {
if(preg_match("@^http|https://@i",$posted_url)) {
$final_url = preg_replace("@(http://)+@i",'http://',$posted_url);
// return "*** - ***Match : ".$final_url;
}
else {
$final_url = 'http://'.$posted_url;
// return "*** / ***Match : ".$final_url;
}
}
else {
if (substr($posted_url, 0, 1) === '/') {
// return "*** / ***Not Match :".$final_url."<br>".$baseUrl.$posted_url;
$final_url = $baseUrl.$posted_url;
}
else {
// return "*** - ***Not Match :".$posted_url."<br>".$baseUrl."/".$posted_url;
$final_url = $baseUrl."/".$final_url; }
}
이 기능을 사용할 수 있지만 웹 사이트가 오프라인 인 경우 false를 반환합니다.
function isValidUrl($url) {
$url = parse_url($url);
if (!isset($url["host"])) return false;
return !(gethostbyname($url["host"]) == $url["host"]);
}
실제로 ... filter_var ($ url, FILTER_VALIDATE_URL); 잘 작동하지 않습니다. 실제 URL을 입력하면 작동하지만 http : // 만 검사하므로 " http : // weirtgcyaurbatc " 와 같은 것을 입력 하면 여전히 실제라고 말합니다.
ttps://www.youtube.com
지정된 URL이 유효한지 확인하는 또 다른 방법은, 주어진 URL에서 헤더를 가져옵니다 기능 아래,이 URL이 유효한지 확인합니다 액세스를 시도하는 것입니다 및 웹 서버가 살아있다 :
function is_url($url){
$response = array();
//Check if URL is empty
if(!empty($url)) {
$response = get_headers($url);
}
return (bool)in_array("HTTP/1.1 200 OK", $response, true);
/*Array
(
[0] => HTTP/1.1 200 OK
[Date] => Sat, 29 May 2004 12:28:14 GMT
[Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux)
[Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
[ETag] => "3f80f-1b6-3e1cb03b"
[Accept-Ranges] => bytes
[Content-Length] => 438
[Connection] => close
[Content-Type] => text/html
)*/
}
2012 년 부터이 기사 를 살펴 보았습니다 . 단순한 URL 일 수도 있고 아닐 수도있는 변수를 고려 합니다.
이 기사의 저자 인 David Müeller 는이 기능을 제공합니다 filter_var
.
/**
* Modified version of `filter_var`.
*
* @param mixed $url Could be a URL or possibly much more.
* @return bool
*/
function validate_url( $url ) {
$url = trim( $url );
return (
( strpos( $url, 'http://' ) === 0 || strpos( $url, 'https://' ) === 0 ) &&
filter_var(
$url,
FILTER_VALIDATE_URL,
FILTER_FLAG_SCHEME_REQUIRED || FILTER_FLAG_HOST_REQUIRED
) !== false
);
}
누구나 cURL을 사용하여 유효성 검사에 관심이있는 경우 다음 코드를 사용할 수 있습니다.
<?php
public function validationUrl($Url){
if ($Url == NULL){
return $false;
}
$ch = curl_init($Url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($httpcode >= 200 && $httpcode < 300) ? true : false;
}