এটি URL- এ উপস্থিত না থাকলে কীভাবে http: // যুক্ত করবেন?


110

আমি কিভাবে যোগ করতে পারেন http://কোন URL- এ যদি এটি ইতিমধ্যে একটি প্রোটোকল (যেমন অন্তর্ভুক্ত নয় http://, https://বা ftp://)?

উদাহরণ:

addhttp("google.com"); // http://google.com
addhttp("www.google.com"); // http://www.google.com
addhttp("google.com"); // http://google.com
addhttp("ftp://google.com"); // ftp://google.com
addhttp("https://google.com"); // https://google.com
addhttp("http://google.com"); // http://google.com
addhttp("rubbish"); // http://rubbish

যদি আপনার mozilla.orgএকা থাকে, তবে এটি কীভাবে হওয়া উচিত তা আপনি কীভাবে জানবেন http, httpsবা ftp?
অ্যান্টনি ফোরলনি

7
@ অ্যান্টনি: তিনি বলেছেন যে অন্য কোনও প্রোটোকল না থাকলে তিনি "http: //" যুক্ত করতে চান।
নিকফ

3
@ অ্যান্টনি কিন্তু যখন ব্যবহারকারী http: // বা কিছু ছাড়াই ইউআরএল টাইপ করেন, আপনি কি এটি ftp: // বা অন্য কিছু হওয়ার প্রত্যাশা করবেন?
রায়ান

উত্তর:


265

@ নিকফ কোডের একটি পরিবর্তিত সংস্করণ:

function addhttp($url) {
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

স্বীকৃতি ftp://, ftps://, http://এবং https://একটি মামলা অবশ উপায়।


5
নীচে অ্যাডএইচটিপি এবং অ্যাডস্কিমের তুলনা করে, আমি এই সিদ্ধান্তে পৌঁছেছি যে পারফরম্যান্সের দিক থেকে অ্যাডস্কেমটি আরও ভাল: $url = "www.google.com"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addScheme( $url ); } echo microtime(true) - $init; echo "<BR>"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addhttp( $url ); } echo microtime(true) - $init;
লুইস লবো বোরোবিয়া

ইউআরএল '//' দিয়ে শুরু হলে কী হবে?
321

@ হোল্ডেন ৩২২ এটি হাতির সম্পর্কে কবিতাটির কথা মনে করিয়ে দেয় যা সাঁতার কাটতে গিয়েছিল এবং আপনাকে কোনও ক্ষতি করতে এবং কোনও ক্ষতি করতে পারে এমন কোনও কাজেই আপনাকে আটকাতে মানসিকতা নিয়ে মাছ হিসাবে ফিরে এসেছিল। বিশ্বে অনেক লোক রয়েছে এবং আপনি জানেন যে আপনার কাছে এই অবিশ্বাস্য ধারণা রয়েছে এবং আপনি যা ভাবেন তা অনুপ্রেরণা, তবে এটি সত্য নয়। কারণ যেভাবে আমাদের মনগুলি তারায়িত এবং মানুষের সম্পর্কে সত্য তা হল যে আমরা এমন জিনিসগুলি করার জন্য ডিজাইন করি না যা আরামদায়ক নয়।
হোমারুন

136

লেখার সময়, কোনও উত্তরই এর জন্য অন্তর্নির্মিত ফাংশনটি ব্যবহার করে না:

function addScheme($url, $scheme = 'http://')
{
  return parse_url($url, PHP_URL_SCHEME) === null ?
    $scheme . $url : $url;
}

echo addScheme('google.com'); // "http://google.com"
echo addScheme('https://google.com'); // "https://google.com"

আরো দেখুন: parse_url()


13
এটি নির্বাচিত উত্তর হওয়া উচিত - যখন ভাষার স্থানীয় সমর্থন থাকে তখন কেন আপনার নিজের রোল করুন? চমৎকার কাজ.
টম অগার

2
এই ফাংশনটি দিয়ে তৈরি করা যেতে পারে এমন একটি উন্নতি হ'ল ক্ষেত্রটির কোনও মূল্য আছে কিনা তা খালি ক্ষেত্রের জন্য কোনও HTTP যুক্ত করছে না তা পরীক্ষা করে দেখানো হচ্ছে।
র্যান্ডি জনসন

এটি আপেক্ষিক প্রোটোকলগুলির সাথে কাজ করে না। যেমনecho addScheme('//google.com');
টেলান

2
@ টেলান হ্যাঁ, আপনাকে করতে হবেltrim($url, '/')
জ্যাক ২৩

51

কোনও প্রোটোকল রয়েছে কিনা তা পরীক্ষা করে দেখুন (": //" দ্বারা বর্ণিত) এবং যদি না পাওয়া যায় তবে "http: //" যুক্ত করুন।

if (false === strpos($url, '://')) {
    $url = 'http://' . $url;
}

দ্রষ্টব্য : এটি একটি সহজ এবং সোজা সমাধান হতে পারে, তবে জ্যাকের উত্তর ব্যবহার parse_urlকরা প্রায় প্রায় সহজ এবং আরও শক্তিশালী। আপনার সম্ভবত এটি ব্যবহার করা উচিত।


2

এর সেরা উত্তরটি এরকম কিছু হবে:

function addhttp($url) 
{
  return $url = empty(parse_url($url)['scheme']) ? 'http://' . ltrim($url, '/') : $url;
}

1

এর জন্য স্ট্রিংটি স্ক্যান করুন ://, যদি এটি না থাকে তবে প্রিপেন্ড করুনhttp:// তবে স্ট্রিংকে করুন .., অন্য সব কিছুই স্ট্রিংটি যেমন রয়েছে তেমন ব্যবহার করুন।

আপনার জঞ্জাল ইনপুট স্ট্রিং না থাকলে এটি কাজ করবে।


আমি একটি রেইজেক্স সংস্করণ পছন্দ করব :)
রায়ান

3
রেজেেক্সে খুব দ্রুত হবেন না Don't Regex পড়তে শক্ত হতে ঝোঁক এবং সমস্যাটি বাড়ার পরে এটি অন্য সমস্যা / বাগ প্রবর্তন করতে পারে।
রোসদী কাসিম

0

নিকফ সমাধান সংশোধিত:

function addhttp($url) {
    if (!preg_match("@^https?://@i", $url) && !preg_match("@^ftps?://@i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

আমি বিশ্বাস করি ftps://এটিও বৈধ।
অ্যালিক্স অ্যাক্সেল

@ অ্যালিক্স: এটি সম্পর্কে অবগত ছিল না। সম্পাদনা করা হয়েছে।
কামশেটো

0
<?php

if (!preg_match("/^(http|ftp):/", $_POST['url'])) {
   $_POST['url'] = 'http://'.$_POST['url'];
}
$url = $_POST['url'];

?>

এই কোডটি URL না থাকলে HTTP: // যুক্ত করবে।


-1

এটা চেষ্টা কর. জলরোধক নয় *, তবে যথেষ্ট ভাল হতে পারে:

function addhttp($url) {
    if (!preg_match("@^[hf]tt?ps?://@", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

*: অর্থাৎ, "fttps: //" এর মতো উপসর্গগুলি বৈধ হিসাবে বিবেচিত হবে।


6
এটি মিলবে (সত্য প্রত্যাবর্তন সত্য এবং যদি এটি মিথ্যা হিসাবে মূল্যায়ন করা হয়) অদ্ভুত সংমিশ্রণগুলি .. যেমন এইচটিপিএস, এফটিটিপিএস, এফটিটিপি, এইচটিপি, আমার ধারণা।
কামশেটো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.