javascript - আন্দালিব রহমান পার্থ স্ত্রী




জাভাস্ক্রিপ্টে হোস্টনাম এবং পাথের মধ্যে একটি URL কীভাবে পার্স করব? (14)

আমি একটি স্ট্রিং নিতে চাই

var a = "http://example.com/aa/bb/"

এবং এমন একটি বস্তুর মধ্যে এটি প্রক্রিয়া

a.hostname == "example.com"

এবং

a.pathname == "/aa/bb"

AngularJS উপায় - এখানে fiddle: http://jsfiddle.net/PT5BG/4/

<!DOCTYPE html>
<html>
<head>
    <title>Parse URL using AngularJS</title>
</head>
<body ng-app ng-controller="AppCtrl" ng-init="init()">

<h3>Parse URL using AngularJS</h3>

url: <input type="text" ng-model="url" value="" style="width:780px;">

<ul>
    <li>href = {{parser.href}}</li>
    <li>protocol = {{parser.protocol}}</li>
    <li>host = {{parser.host}}</li>
    <li>hostname = {{parser.hostname}}</li>
    <li>port = {{parser.port}}</li>
    <li>pathname = {{parser.pathname}}</li>
    <li>hash = {{parser.hash}}</li>
    <li>search = {{parser.search}}</li>
</ul>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>

<script>
function AppCtrl($scope) {

    $scope.$watch('url', function() {
        $scope.parser.href = $scope.url;
    });

    $scope.init = function() {
        $scope.parser = document.createElement('a');
        $scope.url = window.location;
    }

}
</script>

</body>
</html>

আজ আমি এই সমস্যাটি পূরণ করি এবং আমি খুঁজে পেয়েছি: URL - MDN ওয়েব API গুলি

var url = new URL("http://test.example.com/dir/subdir/file.html#hash");

এই প্রত্যাবর্তন:

{ hash:"#hash", host:"test.example.com", hostname:"test.example.com", href:"http://test.example.com/dir/subdir/file.html#hash", origin:"http://test.example.com", password:"", pathname:"/dir/subdir/file.html", port:"", protocol:"http:", search: "", username: "" }

আমার প্রথম অবদান আশা করি আপনাকে সাহায্য করবে!


আপনি Locutus প্রকল্প (পূর্ববর্তী php.js) থেকে parse_url() ফাংশন ব্যবহার করতে পারেন।

কোড:

parse_url('http://username:[email protected]/path?arg=value#anchor');

ফলাফল:

{
  scheme: 'http',
  host: 'hostname',
  user: 'username',
  pass: 'password',
  path: '/path',
  query: 'arg=value',
  fragment: 'anchor'
}


এখানে একটি সংস্করণ যা আমি https://gist.github.com/1847816 থেকে অনুলিপি করেছি, তবে পুনঃলিখন করা যাতে এটি পড়তে এবং ডিবাগ করা সহজ হয়। "ফলাফল" নামক আরেকটি ভেরিয়েবলের নোঙ্গর ডেটা অনুলিপি করার কারণ হল নোঙ্গর তথ্যটি অনেক দীর্ঘ, এবং তাই ফলাফলের সীমিত সংখ্যক মান কপি করার ফলে ফলাফলটি সহজতর করতে সহায়তা করবে।

/**
 * See: https://gist.github.com/1847816
 * Parse a URI, returning an object similar to Location
 * Usage: var uri = parseUri("hello?search#hash")
 */
function parseUri(url) {

  var result = {};

  var anchor = document.createElement('a');
  anchor.href = url;

  var keys = 'protocol hostname host pathname port search hash href'.split(' ');
  for (var keyIndex in keys) {
    var currentKey = keys[keyIndex]; 
    result[currentKey] = anchor[currentKey];
  }

  result.toString = function() { return anchor.href; };
  result.requestUri = result.pathname + result.search;  
  return result;

}

এখানে পাওয়া যায়: https://gist.github.com/jlong/2428561

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.host;     // => "example.com:3000"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.hash;     // => "#hash"
parser.search;   // => "?search=test"
parser.origin;   // => "http://example.com:3000"

চাকা reinventing বন্ধ করুন। https://github.com/medialize/URI.js/ ব্যবহার করুন

var uri = new URI("http://example.org:80/foo/hello.html");
// get host
uri.host(); // returns string "example.org:80"
// set host
uri.host("example.org:80");

ফ্রডডিফিউজির উত্তরটি বেশ ভাল, তবে ইন্টারনেট এক্সপ্লোরারের মধ্যে আপেক্ষিক ইউআরএলগুলিকে সমর্থন করার প্রয়োজন ছিল। আমি নিম্নলিখিত সমাধান দিয়ে এসেছি:

function getLocation(href) {
    var location = document.createElement("a");
    location.href = href;
    // IE doesn't populate all link properties when setting .href with a relative URL,
    // however .href will return an absolute URL which then can be used on itself
    // to populate these additional fields.
    if (location.host == "") {
      location.href = location.href;
    }
    return location;
};

এখন প্রয়োজনীয় বৈশিষ্ট্য পেতে এটি ব্যবহার করুন:

var a = getLocation('http://example.com/aa/bb/');
document.write(a.hostname);
document.write(a.pathname);

JSFiddle উদাহরণ: http://jsfiddle.net/6AEAB/


শুধু url.js লাইব্রেরি ব্যবহার করুন (ওয়েব এবং node.js জন্য)।

https://github.com/websanova/js-url

url: http://example.com?param=test#param=again

url('?param'); // test
url('#param'); // again
url('protocol'); // http
url('port'); // 80
url('domain'); // example.com
url('tld'); // com

etc...

সহজ নিয়মিত অভিব্যক্তি সম্পর্কে কি?

url = "http://www.example.com/path/to/somwhere";
urlParts = /^(?:\w+\:\/\/)?([^\/]+)(.*)$/.exec(url);
hostname = urlParts[1]; // www.example.com
path = urlParts[2]; // /path/to/somwhere

js-uri (গুগল কোডে উপলব্ধ) একটি স্ট্রিং ইউআরএল নেয় এবং এটি থেকে একটি URI বস্তুর সমাধান করে:

var some_uri = new URI("http://www.example.com/foo/bar");

alert(some_uri.authority); // www.example.com
alert(some_uri);           // http://www.example.com/foo/bar

var blah      = new URI("blah");
var blah_full = blah.resolve(some_uri);
alert(blah_full);         // http://www.example.com/foo/blah

যারা IE, ফায়ারফক্স, এবং ক্রোমে কাজ করে এমন একটি আধুনিক সমাধান খোঁজার জন্য:

হাইপারলিঙ্ক উপাদান ব্যবহার করে এমন কোনও সমাধান ক্রোমে একই কাজ করবে না। যদি আপনি ক্রোমে একটি অবৈধ (বা ফাঁকা) url পাস করেন তবে এটি সর্বদা হোস্টটি ফিরে পাবে যেখানে স্ক্রিপ্টটি বলা হয়। তাই IE তে আপনি ফাঁকা পাবেন, তবে ক্রোমে আপনি স্থানীয় হোস্ট পাবেন (অথবা যাই হোক না কেন)।

আপনি রেফারার তাকান চেষ্টা করছেন, এই প্রতারণাপূর্ণ। আপনি নিশ্চিত হবেন যে হোস্টটি আপনি ফিরে পেতে আসল url এ এটির সাথে মোকাবিলা করতে চান:

    function getHostNameFromUrl(url) {
        // <summary>Parses the domain/host from a given url.</summary>
        var a = document.createElement("a");
        a.href = url;

        // Handle chrome which will default to domain where script is called from if invalid
        return url.indexOf(a.hostname) != -1 ? a.hostname : '';
    }

var getLocation = function(href) {
    var l = document.createElement("a");
    l.href = href;
    return l;
};
var l = getLocation("http://example.com/path");
console.debug(l.hostname)
>> "example.com"
console.debug(l.pathname)
>> "/path"

var loc = window.location;  // => "http://example.com:3000/pathname/?search=test#hash"

বর্তমান ইউআরএল ফিরে।

আপনি যদি নিজের স্ট্রিংটি একটি ইউআরএল হিসাবে পাস করতে চান ( IE11 তে কাজ করে না ):

var loc = new URL("http://example.com:3000/pathname/?search=test#hash")

তারপর আপনি এটি মত পার্স করতে পারেন:

loc.protocol; // => "http:"
loc.host;     // => "example.com:3000"
loc.hostname; // => "example.com"
loc.port;     // => "3000"
loc.pathname; // => "/pathname/"
loc.hash;     // => "#hash"
loc.search;   // => "?search=test"




url