কোনও URL টি কার্যকর কিনা তা যাচাই করার সর্বোত্তম উপায়


149

আমি চেক করতে পিএইচপি ব্যবহার করতে চাই, যদি $myoutputভেরিয়েবলে সঞ্চিত স্ট্রিংটিতে একটি বৈধ লিঙ্ক বাক্য গঠন থাকে বা এটি কেবল একটি সাধারণ পাঠ্য। ফাংশন বা সমাধান, যা আমি সন্ধান করছি, এর সাথে জিইটি প্যারামিটারগুলি সহ সমস্ত লিঙ্ক ফর্ম্যাটগুলি সনাক্ত করা উচিত।

অনেকগুলি সাইটে প্রস্তাবিত একটি সমাধান, আসলে স্ট্রিংয়ের জিজ্ঞাসা করার জন্য (সিআরএল বা file_get_contents()ফাংশন ব্যবহার ) আমার ক্ষেত্রে সম্ভব নয় এবং আমি এড়াতে চাই।

আমি নিয়মিত প্রকাশ বা অন্য কোনও সমাধান সম্পর্কে ভেবেছিলাম।


সিআরএল ব্যবহার করা বা এটির এইচটিটিপি বিষয়বস্তু পাওয়া ধীর হতে পারে, আপনি যদি আরও দ্রুত এবং প্রায় নির্ভরযোগ্য কিছু চান, তবে হোস্টনামে গেথস্টব্যাডড্র () ব্যবহার করার বিষয়টি বিবেচনা করুন। যদি এটি কোনও আইপি-তে সমাধান হয় তবে সম্ভবত এটির কোনও ওয়েবসাইট রয়েছে। অবশ্যই এটি আপনার প্রয়োজনের উপর নির্ভর করে।
ট্র্যাভিসো

উত্তর:


301

আপনি একটি স্থানীয় ফিল্টার ভ্যালিডেটর ব্যবহার করতে পারেন

filter_var($url, FILTER_VALIDATE_URL);

প্রয়োজনীয় উপাদানগুলি সহ URLচ্ছিকভাবে ইউআরএল হিসাবে (» http://www.faqs.org/rfcs/rfc2396 অনুযায়ী ) মান বৈধ করে । একটি বৈধ ইউআরএল এইচটিটিপি প্রোটোকল HTTP: // নির্দিষ্ট নাও করতে পারে তাই সাবধান থাকুন ইউআরএল একটি প্রত্যাশিত প্রোটোকল, যেমন ssh: // বা মেলটো: ব্যবহার করে তা নির্ধারণের জন্য আরও বৈধতার প্রয়োজন হতে পারে। নোট করুন যে ফাংশনটি কেবলমাত্র ASCII ইউআরএলগুলিকে বৈধ বলে মনে করবে; আন্তর্জাতিকীকরণ করা ডোমেনের নাম (অ-এসসিআইআই অক্ষরযুক্ত) ব্যর্থ হবে।

উদাহরণ:

if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
    die('Not a valid URL');
}

9
এগুলি বৈধ ইউআরএল হওয়ায় @ রাভেরেন প্রত্যাশিত আচরণ।
গর্ডন

8
সচেতন থাকুন যা FILTER_VALIDATE_URLকোনও ইউআরএলের প্রোটোকলকে বৈধতা দেয় না। সুতরাং ssh://, ftp://ইত্যাদি পাস হবে।
Seph

3
এগুলি বৈধ ইউআরএল হওয়ায় @ সেফভেলুট প্রত্যাশিত আচরণ।
গর্ডন

1
এটি টিটিপি: //amazon.com- এর মতো ইউআরএলগুলিকে অনুমতি দেয়
এলিয়া ওয়েইস

4
@ জোশহাবদাস, আমি মনে করি আপনি বিন্দুটি মিস করছেন। পিএইচপি কোড ঠিক তেমন করে যা দাবি করে does তবে এটি আপনার মন পড়তে পারে না। অবৈধ এবং অযাচিত মধ্যে একটি বিশাল পার্থক্য আছে .. অযাচিত খুব সাবজেক্টিভ, যার কারণে প্রোগ্রামারকে সেই বিশদটি নিয়ে কাজ করতে ছেড়ে দেওয়া হয়। আপনি নোটটি ইউআরএলকে বৈধতা দেয় তা নোট করতে পারে তবে এটি বিদ্যমান বলে প্রমাণ দেয় না। এটি পিএইচপি-র দোষ নয় যে কোনও ব্যবহারকারী "অ্যামাজন," "অ্যামোজন" ভুল করে টাইপ করেছেন যা যাচাই করবে, তবে এখনও অযাচিত।
জেবিএইচ

20

এখানে আমি খুঁজে পাওয়া সেরা টিউটোরিয়াল এখানে:

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")

1
কেবল একটি নিট: !filter_var(...) === false==> filter_var(...) === trueবা ঠিক filter_var(...)। :)
ডোমেনিকো দে ফেলিস

@ এরিকগ্র্যাকিয়া এই কোডটি এটি ওপি যেমন জিজ্ঞাসা করেছে ঠিক তেমন একটি HTTP / S URL এর যাচাই করে না। এটি ssh: //, ftp: // ইত্যাদির মতো জিনিসগুলি পাস করবে এটি কেবল তখনই পরীক্ষা করে যদি এটির কোনও
সিআরএটিক্যালি

FILTER_VALIDATE_URL ব্যবহার করবেন না। এটি অগোছালো এবং বিশ্বাসযোগ্য নয়। যেমন এটি বৈধ ttps://www.youtube.comহিসাবে বৈধতা দেয়
জেফজ

12

ফিল্টার_ওয়ার () ব্যবহার অ-এসকিআই অক্ষরের সাথে ইউআরএলগুলির জন্য ব্যর্থ হবে, উদাহরণস্বরূপ ( http://pt.wikedia.org/wiki/Guimarães )। নিম্নলিখিত ফাংশনটি ফিল্টার_ওয়ারকে কল করার আগে সমস্ত অ- অসি চরগুলি (যেমন: http://pt.wikedia.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";
}

এই হল. শেষ পর্যন্ত কেউ 2017 এ ফিরে এসেছিল
কাইল কিম

আমার জন্য কাজ করে (অন্যরা
বিটিডাব্লু করে

এটি আমার জন্য কাজ করা একমাত্র সমাধান। ধন্যবাদ!
Silas

10
function is_url($uri){
    if(preg_match( '/^(http|https):\\/\\/[a-z0-9_]+([\\-\\.]{1}[a-z_0-9]+)*\\.[_a-z]{2,5}'.'((:[0-9]{1,5})?\\/.*)?$/i' ,$uri)){
      return $uri;
    }
    else{
        return false;
    }
}

3

ব্যক্তিগতভাবে আমি এখানে নিয়মিত প্রকাশ করতে চাই। বেলো কোড পুরোপুরি আমার জন্য কাজ করেছে।

$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; }
}

1
ওয়েবসাইট URL টি যাচাই করার জন্য এটি সেরা উত্তর। কিছু পরিবর্তন সঙ্গে পুরোপুরি এই কাজ। ধন্যবাদ
আমির হোসেইন করিমি 27'19

3

ফিল্টার_ভার () এর সাথে http: // এর প্রয়োজনীয় সমস্যাগুলি দেওয়া হয়েছে, আমি ব্যবহার করি:

$is_url = filter_var($filename, FILTER_VALIDATE_URL) || array_key_exists('scheme', parse_url($filename));


FILTER_VALIDATE_URL ব্যবহার করবেন না। এটি অগোছালো এবং বিশ্বাসযোগ্য নয়। উদাহরণস্বরূপ এটি বৈধ ttps://www.youtube.comহিসাবে বৈধতা দেয়
জেফজ

2

আপনি এই ফাংশনটি ব্যবহার করতে পারেন, তবে ওয়েবসাইট অফলাইনে থাকলে এটি মিথ্যা হয়ে যাবে।

  function isValidUrl($url) {
    $url = parse_url($url);
    if (!isset($url["host"])) return false;
    return !(gethostbyname($url["host"]) == $url["host"]);
}

2

আসলে ... ফিল্টার_ভার (v url, FILTER_VALIDATE_URL); খুব ভাল কাজ করে না। আপনি যখন সত্যিকারের ইউআরএল টাইপ করেন, এটি কাজ করে তবে এটি কেবল http: // এর জন্য যাচাই করে তোলে তাই আপনি যদি " http: // weirtgcyaurbatc " এর মতো কিছু টাইপ করেন তবে এটি এখনও বলবে এটি আসল।


ইন্টেন্সের জন্য FILTER_VALIDATE_URL বৈধ ttps://www.youtube.comহিসাবে বৈধ
জেফজ

1

প্রদত্ত ইউআরএলটি বৈধ কিনা তা যাচাই করার আরেকটি উপায় হ'ল এটির অ্যাক্সেস করার চেষ্টা করা, নীচের ফাংশনটি প্রদত্ত ইউআরএল থেকে শিরোনামগুলি এনে দেবে, এটি নিশ্চিত করবে যে ইউআরএল বৈধ কিনা এবং ওয়েব সার্ভার জীবিত:

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
)*/ 
    }   

চমৎকার ধারণা. সার্ভারটি HTTP / 1.0 বা HTTP / 2.0 ব্যবহার করে, বা কোনও পুনর্নির্দেশ ফিরিয়ে দিলে এটি ব্যর্থ হবে।
ইবলামেফিশ

হ্যাঁ, এটি একটি সূচনা পয়েন্ট, আরও উন্নতিগুলি সহজেই করা যায়।
বুদ দামায়ানভ

1

2012 থেকে এই নিবন্ধটি জুড়ে এসেছিল It এটি অ্যাকাউন্টের ভেরিয়েবলগুলির মধ্যে নেয় যা কেবল প্লে ইউআরএল হতে পারে বা নাও হতে পারে

নিবন্ধটির লেখক ডেভিড মেলার এই ফাংশনটি প্রদান করেছেন যা তিনি বলেছিলেন যে, "... কিছুটা খারাপ কাজ [sic] হতে পারে," এর কয়েকটি উদাহরণ 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
    );
}

0

যদি কেউ বৈধতার জন্য সিআরএল ব্যবহার করতে আগ্রহী হয়। আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন।

<?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; 
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.