একটি এইচটিএমএল স্থান% 20 এর পরিবর্তে% 2520 হিসাবে দেখাচ্ছে


109

ফায়ারফক্স ব্রাউজারে একটি ফাইলের নাম পাসওয়ার্ডের পরিবর্তে এটি ফাঁকা স্থানগুলির %2520 পরিবর্তে ঘটায় %20

নামক কোনও ফাইলে আমার নীচের এইচটিএমএল রয়েছে myhtml.html:

<img src="C:\Documents and Settings\screenshots\Image01.png"/>

আমি যখন myhtml.htmlফায়ারফক্সে লোড করি তখন চিত্রটি একটি ভাঙা চিত্র হিসাবে প্রদর্শিত হয়। তাই আমি ছবিটি দেখার জন্য লিঙ্কটিতে ডানদিকে ক্লিক করি এবং এটি এই পরিবর্তিত ইউআরএল দেখায়:

file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
                    ^
                    ^-----Firefox changed my space to %2520.

কি হ্যাক? এটি আমার স্থানকে একটিতে রূপান্তর করেছে %2520। এটি একটি এ রূপান্তর করা উচিত নয় %20?

আমি কীভাবে এই এইচটিএমএল ফাইলটি পরিবর্তন করব যাতে ব্রাউজারটি আমার চিত্রটি খুঁজে পেতে পারে? এখানে কি হচ্ছে?

উত্তর:


219

এটি কি হিসাবে ব্যাখ্যা করার একটি বিট %2520:

%20আপনি নিজের যেমন উল্লেখ করেছেন তেমন সাধারণ স্থানের অক্ষরটি এনকোড করা আছে । %চরিত্র এনকোডেড হয়েছে %25

আপনি পেতে %2520যখন আপনার URL টি ইতিমধ্যে একটি রয়েছে %20এতে, এবং আবার urlencoded, যার রূপান্তরিত %20করতে %2520

আপনি কি (বা কোনও ফ্রেমওয়ার্ক ব্যবহার করছেন আপনি) ডাবল এনকোডিং অক্ষর?

সম্পাদনা করুন: এটিতে কিছুটা প্রসারিত করা হচ্ছে, বিশেষত লোকাল লিঙ্কগুলির জন্য। ধরে নিচ্ছি আপনি সংস্থানটি সংযোগ করতে চান C:\my path\my file.html:

  • আপনি যদি কেবল একটি স্থানীয় ফাইল পাথ সরবরাহ করেন তবে ব্রাউজারটি প্রদত্ত সমস্ত অক্ষরকে এনকোড করে এবং সুরক্ষিত রাখার প্রত্যাশা করে (উপরের দিকে, আপনাকে এটি যেমন ফাঁকা স্থান হিসাবে দেওয়া উচিত, যেহেতু %একটি বৈধ ফাইলনাম অক্ষর এবং এটিকে এনকোড করা হবে) সঠিক URL- এ (পরবর্তী পয়েন্টটি দেখুন)।
  • যদি আপনি file://প্রোটোকলের সাথে একটি URL সরবরাহ করেন তবে আপনি মূলত উল্লেখ করছেন যে আপনি সমস্ত সতর্কতা অবলম্বন করেছেন এবং এনকোডিংয়ের জন্য যা প্রয়োজন এনকোড করেছেন, বাকীটিকে বিশেষ চরিত্র হিসাবে বিবেচনা করা উচিত। উপরের উদাহরণে, আপনার এইভাবে সরবরাহ করা উচিত file:///c:/my%20path/my%20file.html। স্ল্যাশ ফিক্সিং বাদে ক্লায়েন্টদের অক্ষরগুলি এখানে এনকোড করা উচিত নয়।

মন্তব্য:

  • স্ল্যাশ দিকনির্দেশ - ফরোয়ার্ড স্ল্যাশগুলি /ইউআরএল, \উইন্ডোজ পাথগুলিতে বিপরীত স্ল্যাশ ব্যবহৃত হয় তবে বেশিরভাগ ক্লায়েন্ট উভয়কেই যথাযথ ফরোয়ার্ড স্ল্যাশে রূপান্তরিত করে কাজ করবে।
  • এছাড়াও, প্রোটোকলের নামের পরে 3 টি স্ল্যাশ রয়েছে, যেহেতু আপনি চুপচাপ দূরবর্তী হোস্টের পরিবর্তে বর্তমান মেশিনটির উল্লেখ করছেন (পুরো অবিশ্বাস্য পথটি হবে file://localhost/c:/my%20path/my%file.html) তবে আবার বেশিরভাগ ক্লায়েন্ট হোস্ট অংশ ব্যতীত কাজ করবে (অর্থাত কেবল দুটি স্ল্যাশ) ) ধরে নেওয়ার দ্বারা আপনি স্থানীয় মেশিনটি বোঝাচ্ছেন এবং তৃতীয় স্ল্যাশ যুক্ত করেছেন।

1
হেক্সব্লট আসলে এখানে সঠিক। সাধারণত আপনি যখন ইউআরএল প্রোগ্রামিং দ্বারা আপনার ইউআরএলগুলি এনকোড করে থাকেন তখন এটি ঘটে থাকে এবং একটি বট আসে এবং এটি দ্বিতীয়বার এনকোড করে। বটগুলির এটি করার একটি খারাপ অভ্যাস রয়েছে। দুটি আছে আপনি এই সমস্যাটি পরিচালনা করতে পারেন। 1) আপনি চেষ্টা ব্যতীত 404 বা 401 করতে পারেন বা আপনি একটি ছোট ফাংশন লিখতে পারেন যা ডাবল ডিকোডযুক্ত মানগুলি ব্যবসায়িক যুক্তির জন্য অন্য কোনও পদ্ধতির হাতে তুলে দেওয়ার আগে ডিকোড করবে।
রায়ান ওয়াটস

এটি আমাকে jQuery এজাক্স অনুরোধ প্রেরণ করার সময় কেন তা পাচ্ছিলাম তা বুঝতে সহায়তা করে। আমি মানটিতে এনকোডেরিউআইআরকিউম্পোন্ট ফাংশন সহ একটি অজ্যাক্স জিইটি অনুরোধে ডেটা অ্যাট্রিবিউটটি সেট করেছিলাম, তবে জিক্যুরি ইতিমধ্যে এটি ডিফল্টরূপে করে, তাই কেন আমি% 2520 পাচ্ছিলাম। সত্যিই সহায়ক ধন্যবাদ।
আশের

ক্রোমের পক্ষে লিঙ্কটির ব্যাখ্যা বা ব্যাখ্যা না করার জন্য কি কোনও কমান্ড লাইন যুক্তি নেই?
আলেএক্স_আর

আমার http://mysite/test & that... If I use urlEncode আছে - এটিতে পরিবর্তন হয় http://mysite/test%20&%20thatতবে আমি &% 26 তেও পরিবর্তন করতে চাই তাই এটি মাইসাইট / টেস্ট% 20% 26% 20 hat আমি কীভাবে এটি করতে পারি?
সিআই 8

10

কারও কারও জন্য - সম্ভবত বৈধ - ইউআরএলটি দুবার এনকোড করা হয়েছিল। %25urlncoded %সাইন। মূল ইউআরএলটি দেখে মনে হচ্ছে:

http://server.com/my path/

তারপরে এটি একবারের সাথে সংযুক্ত হয়ে গেছে:

http://server.com/my%20path/

এবং দু'বার:

http://server.com/my%2520path/

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


আমি একই সমস্যা পেয়েছি তবে ডিফল্ট ইউরেনকোডিংটি কেন প্রথমবারে দু'বার প্রক্রিয়াজাত হয়েছিল তা আমি বুঝতে পারি না।
জাংওয়ান জ্বিন

পরিস্থিতির উপর নির্ভর করে ডাবল-এনকোডিং সঠিকভাবে এনকোডিং ব্যবহারের জন্য কার্যকর বৈধ ফলাফল হতে পারে। এই উত্তরটি এমন ছাপ তৈরি করতে পারে যে ডাবল-এনকোডিং সর্বদা ভুল এবং আপনি "এটিকে কাজ করার জন্য" প্রয়োজনীয় যতটা এনকোড / আনকোড কোড যুক্ত করে কেবল এনকোডিংয়ের সমস্যাগুলি ঠিক করতে পারেন। এটি ভুল, এবং এইভাবে এনকোডিং বাগগুলি প্রথম স্থানে আসে। -1
ফ্লোরিয়ান শীত

@ ফ্লোরিয়ান উইন্টার আমি সত্যই দেখতে পাচ্ছি না আপনি লাইনের মধ্যে কোথায় পড়েছেন। তুমি কি আমাকে সাহায্য করতে পারবে? (দয়া করে প্রশ্ন এবং আমার উত্তর পড়ুন)
hek2mgl

7

আপনি যখন ফায়ারফক্স ব্রাউজারের মাধ্যমে কোনও স্থানীয় ফাইল নাম দেখার চেষ্টা করছেন, তখন আপনাকে file:\\\প্রোটোকলটি জোর করতে হবে ( http://en.wikedia.org/wiki/File_URI_scheme ) অথবা অন্যথায় ফায়ারফক্স আপনার স্থান TWICE এনকোড করবে W এটি থেকে এইচটিএমএল স্নিপেট পরিবর্তন করুন:

<img src="C:\Documents and Settings\screenshots\Image01.png"/>

এটি:

<img src="file:\\\C:\Documents and Settings\screenshots\Image01.png"/>

অথবা এটা:

<img src="file://C:\Documents and Settings\screenshots\Image01.png"/>

তারপরে ফায়ারফক্সকে জানানো হয়েছে যে এটি একটি স্থানীয় ফাইলের নাম এবং এটি চিত্রটি ব্রাউজারে সঠিকভাবে সরবরাহ করে, একবারে স্ট্রিংটিকে সঠিকভাবে এনকোড করে।

সহায়ক লিঙ্ক: http://support.mozilla.org/en-US/questions/900466


0

নিম্নলিখিত কোড স্নিপেট আমার সমস্যা সমাধান করেছে। ভেবেছিলেন এটি অন্যের পক্ষে উপকারী হতে পারে।

var strEnc = this.$.txtSearch.value.replace(/\s/g, "-");
strEnc = strEnc.replace(/-/g, " ");

বরং ডিফল্ট ব্যবহার encodeURIComponentআমার কোড প্রথম লাইন সব রূপান্তরের উদ্দেশ্যে spacesমধ্যে hyphensRegex প্যাটার্ন ব্যবহার /\s\gএবং নিম্নলিখিত লাইন মাত্র বিপরীত করে, অর্থাত সব পরিবর্তন করে hyphensফিরে spacesআরেকটি ব্যবহার regex pattern /-/g। অক্ষর মিলে যাওয়ার /gজন্য এখানে আসলে দায়বদ্ধ finding all

আমি যখন আমার আজাক্স কলটিতে এই মানটি পাঠাচ্ছি তখন এটি normal spacesসরলভাবে বা সরলভাবে অনুসরণ করে %20এবং এ থেকে পরিত্রাণ পায় double-encoding


1
আমি ধরে নিলাম যে আপনি বিষয়টি সমাধান করছেন না, কেবল এটি coveringেকে রাখছেন - এর মূল কারণ এটি অন্য কোথাও রয়েছে এবং আপনি দ্বিগুণ কাজ করছেন (কোথাও আপনি দুর্ঘটনাক্রমে দু'বার এনকোডিং করছেন, এবং অন্য কোথাও আপনি কভার করার জন্য ম্যানুয়ালি ডিকোড করছেন ing এটি আপ)। ধরে নিই যে আপনি জিনিসগুলি "যথাযথভাবে" করতে চান, তবে সবচেয়ে ভাল হবে আসল অপরাধীকে ডিবাগ করা এবং সন্ধান করা।
নিক আন্দ্রিওপল্লোস

আসলে আমি যেখানেই এই সমস্যাটি পেয়েছি সমাধানটি আমার পক্ষে কাজ করেছে। তাই আমি পোস্ট।
সুব্রত সরকার

2
@ নীলাদ্রিসরকার হেক্সবোল্ট যা বলার চেষ্টা করেছিল তা হ'ল আপনার কোডটি কাজ করার সময় এটি একটি কার্যকর সমাধান নয়, বরং একটি নোংরা সমাধান এবং এড়ানো উচিত ...

-1

এটা চেষ্টা কর?

encodeURIComponent('space word').replace(/%20/g,'+')


1
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম! আপনার পরামর্শটি কেবল একটি কোড স্নিপেটের পরিবর্তে ওপি-র সমস্যার সমাধান করবে কেন সে সম্পর্কে কিছু ব্যাখ্যা অন্তর্ভুক্ত করা হলে সাধারণত উত্তরগুলি আরও কার্যকর হয়। এছাড়াও, যেহেতু এই প্রশ্নের ইতিমধ্যে একটি স্বীকৃত উত্তর রয়েছে, আপনার উত্তরটি কেন তার উত্তরটির চেয়ে বেশি সঠিক তা সম্পর্কে কিছুটা যুক্ত করা ভাল ধারণা।
ডেভিড্যাভ ডেভ 10:38
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.