সার্ভার.আরলএনকোড বনাম এইচটিটিপি ইউটিলিটি Uআরলএনকোড


177

সার্ভার.আরলএনকোড এবং এইচটিপিটিউটিলিটি.আরলএনকোডের মধ্যে কি পার্থক্য রয়েছে?

উত্তর:


133

HttpServerUtility.UrlEncodeHttpUtility.UrlEncodeঅভ্যন্তরীণভাবে ব্যবহার করবে । কোন নির্দিষ্ট পার্থক্য আছে। অস্তিত্বের কারণ Server.UrlEncodeহ'ল ক্লাসিক এএসপির সাথে সামঞ্জস্যতা।


3
কি পালাতে পারে। অভ্যন্তরীণভাবে এটা এই ফাংশন কল referencesource.microsoft.com/#System/net/System/Net/...
জেফ

পাঠকদের জন্য: দয়া করে নীচে জোয়েল মুলারের উত্তরটি দেখুন। এটি ইউআরএল এনকোডের সবচেয়ে কার্যকর উপায়: স্ট্যাকওভারফ্লো.com
603962

264

আগে এই পদ্ধতিগুলির সাথে আমার উল্লেখযোগ্য মাথাব্যথা ছিল, আমি আপনাকে কোনও পরিবর্তনের এড়াতেUrlEncode এবং পরিবর্তে ব্যবহারের পরামর্শ দিইUri.EscapeDataString - কমপক্ষে এটির একটি বোধগম্য আচরণ রয়েছে।

দেখা যাক...

HttpUtility.UrlEncode(" ") == "+" //breaks ASP.NET when used in paths, non-
                                  //standard, undocumented.
Uri.EscapeUriString("a?b=e") == "a?b=e" // makes sense, but rarely what you
                                        // want, since you still need to
                                        // escape special characters yourself

তবে আমার ব্যক্তিগত প্রিয় হতে পারে প্রিয়টি হ'ল এইচটিপি ইউটিলিটি Uআরলপ্যাথ এনকোড - এটি সত্যই বোধগম্য। এটি এনকোড করে:

  • "" ==> "% 20"
  • "100% সত্য" ==> "100%% 20true" (ঠিক আছে, আপনার url এখন ভেঙে গেছে)
  • "পরীক্ষা A.aspx # অ্যাঙ্কার বি" ==> "পরীক্ষা% 20A.aspx # অ্যাঙ্কর% 20B "
  • "পরীক্ষা A.aspx? hmm # অ্যাঙ্কার বি" ==> "পরীক্ষা% 20A.aspx? hmm # অ্যাঙ্কর বি " ( পূর্ববর্তী পালানোর ক্রমের সাথে পার্থক্যটি নোট করুন! )

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

সংক্ষেপে, ইউরি.এস্কেপডেটাস্ট্রিংয়ের সাথে আঁকুন


4
এবং দুর্ভাগ্যক্রমে কিছু ওয়েব সার্ভারের বিরুদ্ধে এইচটিটিপি অনুরোধ করার সময় এখনও এটি কাজ করে না - উরি.এস্কেপডাটাস্ট্রিং () এনকোড করে না "!" বা "" ", যা পালিয়ে যাওয়ার সবচেয়ে ব্রাউজার বাস্তবায়ন () কীভাবে কাজ করে তার থেকে পৃথক ...
ক্রিস আর ডোনেলি

6
! এবং 'অক্ষরগুলি এনকোড করার কথা নয়; তবে যদি কোনও বগি ওয়েবসারভারের এটির প্রয়োজন হয় তবে এটি কাজ করা সহজ। জাভাস্ক্রিপ্টের পালানোর কাজটি এড়িয়ে চলুন - এটি অন্তর্নিহিত বগি (একের পক্ষে রাউন্ডট্রিপ করা অসম্ভব)। Xkr.us/articles/javascript/encode-compare দেখুন - তবে সংক্ষেপে; পরিবর্তে আপনি এনকোডউরিকমম্পোনেন্ট () ব্যবহার করতে পারেন, যা এসপসডেটাস্ট্রিংয়ের সাথে একই রকম আচরণ করে - এটি পূর্বে এবং বিপরীতভাবে একটি স্ট্রিং এনকোড করে, এবং এনকোডও দেয় না! এবং 'অক্ষর।
ইমন নের্বোন

2
এটি পুরানো, তবে প্রশ্নটি প্রথম পৃষ্ঠায় জড়িয়ে গেল, তাই .... ইউআরএল স্ট্রিংয়ের পথ অংশটি ডোমেন এবং এর মধ্যবর্তী অংশ? বা # একটি url এ।
পাওয়ারলর্ড

2
@ টিম: অনেকগুলি থাকতে পারে ?এবং কে বলতে চান কোনটি এনকোড করতে হবে এবং কোনটি পৃথককারী হিসাবে কাজ করবে? স্থান হিসাবে: উভয় ক্ষেত্রেই স্থানটি হ্যাশে রয়েছে তাই কোয়েরি-খণ্ডের উপস্থিতি বা অনুপস্থিতি কোনও বিষয় নয়। এবং পরিশেষে, এটি একটি ইউরির সাথে দূষিত করা অনর্থক, যেমনটি% যেমন রয়েছে দ্বিতীয় উদাহরণে। UrlPathEncodeপদ্ধতি প্লেইন borked হয় এবং কখনও ব্যবহার করা উচিত।
ইমন নের্বোন

1
আমি মনে করি আমার উত্তর stackoverflow.com/a/13993486/237091 UrlEncode / UrlPathEncode এর অভিপ্রেত ব্যবহারের উপর একটু আলোকপাত করতে পারে।
স্কট

60

এটি প্রথম জিজ্ঞাসা করা হওয়ার প্রায় 9 বছর পরে ফরোড -ফরোয়ার্ড এবং .NET কোর এবং .NET স্ট্যান্ডার্ডের বিশ্বে, আমাদের কাছে ইউআরএল-এনকোডিংয়ের জন্য সবচেয়ে সাধারণ বিকল্পগুলি হ'ল ওয়েব ইউটিলিটি Uআরলএনকোড (আন্ডার System.Net) এবং ইউরি .স্কেপডেটাস্ট্রিং । এখানে এবং অন্য কোথাও সর্বাধিক জনপ্রিয় উত্তরের দ্বারা বিচার করা, ইউরি.স্ক্রপ ডেটাস্ট্রিং পছন্দনীয় বলে মনে হয়। তবে কি তাই? পার্থক্যগুলি বোঝার জন্য আমি কিছু বিশ্লেষণ করেছি এবং আমি এখানে যা এলাম তা এখানে:

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

আরএফসি অনুসারে , সংরক্ষিত অক্ষরগুলি হ'ল ::/?#[]@!$&'()*+,;=

এবং অনিবদ্ধ অক্ষরগুলি বর্ণানুক্রমিক এবং -._~

রায়

ইউরি.স্ক্রপডাটা স্ট্রিং এর মিশনটি পরিষ্কারভাবে সংজ্ঞায়িত করে:% - সমস্ত সংরক্ষিত এবং অবৈধ অক্ষরগুলি কোড করে। ওয়েব ইউটিলিটি.আরল এনকোড সংজ্ঞা এবং বাস্তবায়ন উভয় ক্ষেত্রেই আরও স্পষ্ট । অদ্ভুতভাবে, এটি কিছু সংরক্ষিত অক্ষরগুলি এনকোড করে তবে অন্যগুলি নয় (কেন বন্ধনী এবং বন্ধনী নয় ??), এবং অপরিচিত এখনও এটি নিরপেক্ষভাবে সংরক্ষণযোগ্য ~অক্ষরকে এনকোড করে ।

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


সম্পাদনা করুন: আমি করেছি চেষ্টা সব quirks মধ্যে উপরে উল্লিখিত সংশোধনের Flurl মাধ্যমে Url.Encode, Url.EncodeIllegalCharactersএবং Url.Decodeস্ট্যাটিক পদ্ধতি। এগুলি মূল প্যাকেজে রয়েছে (যা ক্ষুদ্র এবং এতে এইচটিটিপি সমস্ত উপাদান অন্তর্ভুক্ত নয়), বা উত্স থেকে এগুলি ছিঁড়ে ফ্রি মনে করতে পারে না। এগুলিতে আপনার যে কোনও মন্তব্য / প্রতিক্রিয়া আমি স্বাগত জানাই।


কোন অক্ষরগুলি আলাদাভাবে এনকোড করা হয়েছে তা আবিষ্কার করতে আমি এখানে কোডটি ব্যবহার করেছি:

var diffs =
    from i in Enumerable.Range(0, char.MaxValue + 1)
    let c = (char)i
    where !char.IsHighSurrogate(c)
    let diff = new {
        Original = c,
        UrlEncode = WebUtility.UrlEncode(c.ToString()),
        EscapeDataString = Uri.EscapeDataString(c.ToString()),
    }
    where diff.UrlEncode != diff.EscapeDataString
    select diff;

foreach (var diff in diffs)
    Console.WriteLine($"{diff.Original}\t{diff.UrlEncode}\t{diff.EscapeDataString}");

2
এটা অসাধারণ!
জোর্হে আগুয়েরে

1
আধুনিক। নেট ফ্রেমওয়ার্কের প্রস্তাবিত সমাধান যাচাই করা দুর্দান্ত কাজ।
Neowizard

এটি উল্লেখ করা উচিত যে ওয়েব ইউটিলিটি এবং এইচটিপি ইউটিলিটির মধ্যে কিছু পার্থক্য রয়েছে । ওয়েব ইউটিলিটি বড় হাতের ব্যবহার করে এবং এইচটিপি ইউটিলিটি হেক্সা সত্তার জন্য ছোট হাতের ব্যবহার করে। এছাড়াও এইচটিটিপি ইউটিলিটি .NET ফ্রেমওয়ার্ক "ক্লায়েন্ট প্রোফাইল" এর পুরানো সাবসেট সংস্করণগুলিতে অন্তর্ভুক্ত ছিল না। ওয়েব ইউটিলিটি । নেট ফ্রেমওয়ার্ক 4.0 থেকে পাওয়া যায়।
tibx

28

মনে রাখবেন যে সম্ভবত আপনি এই পদ্ধতিগুলির মধ্যে একটি ব্যবহার করা উচিত নয়। মাইক্রোসফ্টের অ্যান্টি-ক্রস সাইট স্ক্রিপ্টিং লাইব্রেরিতে প্রতিস্থাপনগুলি অন্তর্ভুক্ত রয়েছে HttpUtility.UrlEncodeএবং HttpUtility.HtmlEncodeএটি উভয়ই আরও মান-সম্মতিযুক্ত এবং আরও সুরক্ষিত। বোনাস হিসাবে, আপনি একটি JavaScriptEncodeপদ্ধতিও পাবেন।


প্রদত্ত লিঙ্কটিতে ডকুমেন্টেশন এবং এফএকিউ পড়ার পরে, আমি বিশ্বাস করি যে এই উত্তরটি ডেটা এনকোড করার সর্বোত্তম এবং সুরক্ষিত উপায়! এটি ভাগ করে নেওয়ার জন্য একটি টন ধন্যবাদ!
সুধাংশু মিশ্র 6

লিঙ্কটি আর কাজ করে না। প্রতিস্থাপন পদ্ধতি কি?
এডওয়ার্ড ব্রে

: @EdwardBrey এই এন্টি-ক্রস সাইট স্ক্রিপ্টিং গ্রন্থাগার সর্বশেষ সংস্করণ microsoft.com/en-au/download/details.aspx?id=28589
সুধাংশু মিশ্র

11

সার্ভার.উর্লকনোড () ক্লাসিক এএসপির সাথে পিছনে সামঞ্জস্যতা সরবরাহ করার জন্য রয়েছে,

Server.UrlEncode(str);

এর সমতুল্য:

HttpUtility.UrlEncode(str, Response.ContentEncoding);

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