সি # এর কি জাভাস্ক্রিপ্টের এনকোডেরিউআইআরকিউম্পোনেন্ট () এর সমতুল্য?


135

জাভাস্ক্রিপ্টে:

encodeURIComponent("©√") == "%C2%A9%E2%88%9A"

সি # অ্যাপ্লিকেশনগুলির সমতুল্য কি আছে? এইচটিএমএল অক্ষরগুলি পালানোর জন্য আমি ব্যবহার করেছি:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"&#" + ((int)m.Value[0]).ToString() + ";");

তবে আমি নিশ্চিত না যে কীভাবে ম্যাচটি জেএস ব্যবহার করে সঠিক হেক্সাডেসিমাল ফর্ম্যাটে রূপান্তর করতে। উদাহরণস্বরূপ এই কোড:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));

রিটার্নস " %a9%221a"জন্য "©√"পরিবর্তে "%C2%A9%E2%88%9A"। দেখে মনে হচ্ছে আমি বাইট বা কিছু মধ্যে স্ট্রিং বিভক্ত করতে হবে।

সম্পাদনা: এটি একটি উইন্ডোজ অ্যাপ্লিকেশন জন্য, শুধুমাত্র উপলব্ধ আইটেম System.Webআছেন: AspNetHostingPermission, AspNetHostingPermissionAttribute, এবং AspNetHostingPermissionLevel

উত্তর:


217

Uri.EscapeDataStringবা HttpUtility.UrlEncodeকোনও URL এর অংশ হতে বোঝা একটি স্ট্রিং থেকে বাঁচার সঠিক উপায়।

উদাহরণস্বরূপ স্ট্রিং নিন "Stack Overflow":

  • HttpUtility.UrlEncode("Stack Overflow") -> "Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") -> "Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow")-> এছাড়াও এনকোড "+" to "%2b"---->Stack%20%2B%20%20Overflow

ইউআরএলটির আসল অংশ হিসাবে ব্যবহৃত হলে কেবল শেষগুলি সঠিক হয় (কোয়েরি স্ট্রিং প্যারামিটারগুলির কোনওটির বিপরীতে)


আমার যে মুখ্য সমস্যাটি ছিল তা হ'ল আমার সমাধানে সিস্টেম.বিউবের একটি উল্লেখ নেই, তবে আমি এস্কেপউরিস্ট্রিং সম্পর্কে অবগত ছিলাম না, ধন্যবাদ!
ট্র্যাভিস

53
এনকোডিউআরআইকিউম্পোন্টেন্ট () এর বিপরীতে, ইউরি.একপেক্ট ইউরিস্ট্রিং () "+" কে "% 2 বি" তে এনকোড দেয় না। পরিবর্তে ইউরি.স্ক্রপ ডেটাস্ট্রিং () ব্যবহার করুন।
jwaliszko

4
System.Web উল্লেখ করা এড়াতে এইচটিপিটিউটির পরিবর্তে ওয়েব ইউটিলিটি ব্যবহার করুন। .NET কোরটিতে এইচটিপিটিউলিটি নেই।
স্টিভেন ডি কক

2
@ স্টিভ আপনি কি আপনার শেষ অনুচ্ছেদটি সাহসী করে বিবেচনা করবেন? এটি এই পৃষ্ঠায় জানা সবচেয়ে গুরুত্বপূর্ণ জিনিস বলে মনে হয় এবং এর আরও দৃশ্যমানতার প্রয়োজন।
টিমো

: এছাড়াও Uri.EscapeUriString এবং Uri.EscapeDataString মধ্যে পার্থক্য সম্পর্কে আরো ব্যাখ্যার জন্য এই উত্তরটি দেখুন stackoverflow.com/questions/4396598/...
জেসন

20

HttpUtility.HtmlEncode/ ডিকোড
HttpUtility.UrlEncode/ ডিকোড

System.Webআপনার প্রকল্পে যদি এটি সমাবেশে না পাওয়া যায় তবে আপনি সমাবেশে একটি রেফারেন্স যুক্ত করতে পারেন


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

5
আপনি সিস্টেমটিতে একটি রেফারেন্স যুক্ত করতে পারেন। ওয়েব সমাবেশ
ডেভিড

2
এইচটিএমএল এনকোডিং সম্পূর্ণ আলাদা জিনিস। UrlEncode একটি সংবেদনশীল এপিআই যা কখনও ব্যবহার করা উচিত নয়। একটি সম্পূর্ণ ইউআরএল এনকোড করার অর্থ নেই (যদি না আপনি প্যারামিটার হিসাবে ব্যবহারের জন্য এর মানটি এনকোড করতে চান - তবে এটি এটি করে না)। এনকোডিং / পালানোর বিষয়টি হ'ল আপনি বোঝাচ্ছেন যে কোনও সংরক্ষিত চরিত্রটি তার যথাযথ অর্থ ছাড়াই পাস করা উচিত (উদাহরণস্বরূপ? কোয়েরি সনাক্ত করে, বা কোয়েরি প্যারামিটারগুলি পৃথক করে)। এর জন্য এমন জ্ঞান দরকার যা ইউরলকোন্ডে নেই এবং থাকতে পারে না।
ব্র্যান্ডন প্যাডক 19

18

আমি সি # এর জন্য জাভাস্ক্রিপ্টের এনকোডিউআরআইকিউম্পোনমেন্টের সম্পূর্ণ সুসংগত এনালগ করার চেষ্টা করেছি এবং আমার 4 ঘন্টা পরীক্ষার পরে আমি এটি খুঁজে পেয়েছি

সি # কোড:

string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");

ফলাফল: % 40% 23% 24% 25% 5e% 26 * () _% 2b% 20 কিছু% 20text% 20 এখানে% 20% d0% বি0% d0% বিবি% d0% বি 8% 20% ডি0% বিসি% d0% B0% d0% BC% d0% B5% d0% B4% d0% হতে% d0% B2% 20% d0% B1% d0% B0% d0% BA% D1% 83

আপনি জাভাস্ক্রিপ্টের ডিকোডেআরআরএল কম্পোনেন্ট () দিয়ে এটি ডিকোড করার পরে;

আপনি এটি পাবেন: @ # $% ^ & * () _ + এখানে কিছু পাঠ্য али мамедов баку баку

আপনার মনোযোগের জন্য ধন্যবাদ


2
কাজ করে, তবে আপনি কেবল Uri.EscapeDataString("!@#$%^&*()_+ some text here али мамедов баку")পরিবর্তে ব্যবহার করতে পারেন ।
mklement0

আসলে, Uri.EscapeDataString'(' এবং ')' অক্ষরগুলি এনকোড HttpUtility.UrlEncodeকরে না যখন না।
ইস্টিন কলসরুদ

12

System.Uri.EcreenUriString () তেমন কিছু করেছে বলে মনে হয় নি, তবে System.Uri.EPress ডেটা স্ট্রিং () আমার পক্ষে কাজ করেছে।


10

চেষ্টা করুন Server.UrlEncode()বা System.Web.HttpUtility.UrlEncode()উদাহরণের জন্য যখন আপনার কাছে Serverঅবজেক্টটিতে অ্যাক্সেস নেই । আপনি সমাবেশে System.Uri.EscapeUriString()কোনও রেফারেন্স যুক্ত এড়ানোর জন্যও ব্যবহার করতে পারেন System.Web


1
উরি.স্ক্রপ ইউরিস্ট্রিং () আমার পক্ষে কিছু করেনি তবে আমি ইউরি.এস্কেপডাটাস্ট্রিং () ব্যবহার করে স্ট্রিংগুলি যথাযথভাবে ইউআরএল-এনকোড করতে সক্ষম হয়েছি
টোল্যান্ড হ্যান

3
@ টোল্যান্ডহন: আসলেই। কারণটি Uri.EscapeUriString()জাভাস্ক্রিপ্টের সাথে মিলে যায় encodeURI()- যা ইউআরআই-সংরক্ষিত অক্ষর সংরক্ষণ করে। যেমন /, &... যেমন হল (প্লাস #), যেহেতু - হিসাবে আপনি আবিষ্কার করেছেন, এটা Uri.EscapeDataString()জাভাস্ক্রিপ্ট এর সাথে সঙ্গতিপূর্ণ encodeURIComponent()
mklement0

8

একটি উইন্ডোজ স্টোর অ্যাপ্লিকেশানের জন্য, আপনার এইচটিপিপিটিলিটি থাকবে না। পরিবর্তে, আপনার কাছে রয়েছে:

কোনও ইউআরআইয়ের জন্য, '?' এর আগে:

  • পদ্ধতি. Uri.EcreenUriString ("উদাহরণ. com/ স্ট্যাক ওভারফ্লো ++?")
    • -> "উদাহরণ.com/Stack%20 ওভারফ্লো ++?"

'?' এর পরে কোনও ইউআরআই ক্যোয়ারির নাম বা মানের জন্য:

  • পদ্ধতি. ইউরি.স্ক্রপ ডেটাস্ট্রিং ("স্ট্যাক ওভারফ্লো ++")
    • -> "% 20 ওভারফ্লো% 2 বি% 2 বি" স্ট্যাক করুন

একটি জন্য এক্স-WWW-ফর্ম-urlencoded ক্যোয়ারী নাম অথবা মান, একটি পোষ্ট বিষয়বস্তুতে:

  • System.Net। ওয়েব ইউটিলিটি.আরল এনকোড ("স্ট্যাক ওভারফ্লো ++")
    • -> "স্ট্যাক + ওভারফ্লো% 2 বি% 2 বি"

6

আপনি System.Web নেমস্পেসে সার্ভার অবজেক্টটি ব্যবহার করতে পারেন

সার্ভার.আরলএনকোড, সার্ভার.আরলডেকোড, সার্ভার.এইচটিএমএল কোড এবং সার্ভার.এইচটিএমএল ডেকোড।

সম্পাদনা: পোস্টার যুক্ত করেছে যে এটি একটি উইন্ডোজ অ্যাপ্লিকেশন এবং এটি বিশ্বাস করবে এমন কোনও ওয়েব নয়। উপরে তালিকাভুক্ত আইটেমগুলি সিস্টেমের অভ্যন্তরে এইচটিটিপিলিটি ক্লাস থেকে পাওয়া যাবে e প্রকল্পটি অবশ্যই রেফারেন্স হিসাবে যুক্ত করতে হবে।


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