আমি কি <a href…> এ এম্পারস্যান্ডগুলি এনকোড করব?


157

আমি এমন কোড লিখছি যা স্বয়ংক্রিয়ভাবে এইচটিএমএল উত্পন্ন করে, এবং আমি এটি জিনিসগুলি সঠিকভাবে এনকোড করতে চাই।

বলুন আমি নীচের URL টিতে একটি লিঙ্ক তৈরি করছি:

http://www.google.com/search?rls=en&q=stack+overflow

আমি ধরে নিচ্ছি যে সমস্ত বৈশিষ্ট্য মানটি এইচটিএমএল-এনকোড হওয়া উচিত। (দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন)) সুতরাং এর অর্থ যদি আমি উপরের ইউআরএলটিকে একটি অ্যাঙ্কর ট্যাগে রাখি তবে আমার এম্পারস্যান্ডটি এভাবে এনকোড করা উচিত &amp;:

<a href="http://www.google.com/search?rls=en&amp;q=stack+overflow">

এটা কি ঠিক?



6
@ সিরোস্যান্টিলি: এটি সত্যিকারের ইউআরএল স্ট্রিং সম্পর্কে; এটি এইচটিএমএল বৈশিষ্ট্যগুলিতে উপস্থিত হওয়ার সাথে সাথে তারা কীভাবে এনকোডড হয় সে সম্পর্কে এটি।
জেডাব্লু

যেমনটি আমি দেখছি, সবসময় এইচটিএমএল 5 এ এনকোডিং এম্পারস্যান্ডগুলি প্রয়োজন হয় না এবং উত্তরগুলি পুরানো হয়।
কিদিনার

1
জন্য HTML5 প্রশ্ন stackoverflow.com/questions/19441750/...
qdinar

উত্তর:


175

হ্যাঁ, তাই এইচটিএমএল সত্তা এইচটিএমএল বৈশিষ্ট্যগুলির মধ্যে পার্স করা হয় এবং একটি বিভ্রান্তি &একটি অস্পষ্টতা তৈরি করে। কেন আপনি সবসময় লেখা উচিত যে &amp;পরিবর্তে শুধু &ভিতরে সব এইচটিএমএল বৈশিষ্ট্যাবলী।

এটি বলেছে, কেবল &এবং উদ্ধৃতিগুলিকে এনকোড করা দরকারéআপনার অ্যাট্রিবিউটের মতো বিশেষ চরিত্রগুলি থাকলে আপনার এইচটিএমএল বিশ্লেষণকারীকে সন্তুষ্ট করার জন্য এগুলি এনকোড করার দরকার নেই।

এটি এমনটি ঘটত যে URL গুলি যেমন- ASCII অক্ষরগুলির মতো বিশেষ চিকিত্সার প্রয়োজন é। আপনি শতাংশ-পলায়ন ব্যবহারকারীদের এনকোড করতে হয়েছিল এবং এই ক্ষেত্রে এটি দেবে %C3%A9, কারণ সেগুলি আরএফসি 1738 দ্বারা সংজ্ঞায়িত করা হয়েছিল । যাইহোক, আরএফসি 1738 টি আরএফসি 3986 (ইউআরআই, ইউনিফর্ম রিসোর্স আইডেন্টিফায়ারস) এবং আরএফসি 3987 (আইআরআই, আন্তর্জাতিক উত্স সংস্থান সনাক্তকারী) দ্বারা বরখাস্ত করা হয়েছে , যার উপর WHATWG যখন ব্রাউজারগুলিকে নন-এএসসিআইআই সহ একটি ইউআরএল দেখেন তখন তাদের আচরণ কীভাবে করা উচিত তা নির্ধারণ করার জন্য তার কাজটির উপর ভিত্তি করে HTML5 এর যেহেতু এটি অক্ষর । সুতরাং এখন ইউআরএল-এ-এসসিআইআই অক্ষর অন্তর্ভুক্ত করা নিরাপদ, শতাংশ-এনকোড হয়েছে কি না।


1
আমি এটি সম্পর্কে বেশ নিশ্চিত ছিলাম, তবে আমার সন্দেহের বিরল মুহূর্ত ছিল। জানানোর জন্য ধন্যবাদ.
জেডাব্লু

1
আপনি% 20 এর পরিবর্তে স্পেসগুলি "+" হিসাবে এনকোড করতে পারেন - যা ইউআরএল পড়তে সহজ করে তোলে।
নিক

1
+ বর্তমানে মূল আইফোন মেল ক্লায়েন্টের মেলটো লিঙ্কগুলিতে সম্মানিত নয়, এটির জন্য উপযুক্ত।
রায়ান ওলসন

1
é: এখনো এনকোডিং প্রয়োজন stackoverflow.com/questions/2742852/unicode-characters-in-urls
lulalala

4
আমি যুক্ত করব (আমি যেমন এই ভুলের মধ্যে পড়েছি) যে আপনি যদি কোনও টেম্পলেট ইঞ্জিনের উপর নির্ভর করে থাকেন তবে আপনাকে এটি পরীক্ষা করা উচিত যে এটি এইচটিএমএল সত্ত্বাগুলি পালানোর বিষয়ে স্বয়ংক্রিয়ভাবে যত্ন নেয় কিনা। আমার ক্ষেত্রে টুইগ সেটি করছিল এবং আমি &amp;সরাসরি ব্যবহারের পরিবর্তে ট্যাগ অ্যাট্রিবিউটে ভুল করে ডাবল-পলায়ন করেছিলাম &
কামাফেদার

24

বর্তমান অফিসিয়াল এইচটিএমএল সুপারিশ অনুসারে, এম্পারস্যান্ডকে অবশ্যই পালাতে হবে যেমন এর মতো &amp;প্রসঙ্গে। তবে, ব্রাউজারগুলির এটির প্রয়োজন হয় না এবং এইচটিএমএল 5 সিআর এটিকে একটি নিয়ম করার প্রস্তাব দেয় , যাতে বিশেষ বিধিগুলি বৈশিষ্ট্যের মানগুলিতে প্রয়োগ হয় apply বর্তমান এইচটিএমএল 5 বৈধকরণকারীদের এই ক্ষেত্রে পুরানো হয়েছে ( মন্তব্যগুলির সাথে বাগ রিপোর্ট দেখুন )।

অ্যাট্রিবিউট মানগুলিতে অ্যাম্পারস্যান্ডগুলি থেকে মুক্তি পাওয়া সম্ভব থাকবে তবে বর্তমান সরঞ্জামগুলির সাথে বৈধতা ছাড়াও hrefমানগুলিতে সেগুলি পালানোর কোনও ব্যবহারিক প্রয়োজন নেই (এবং যদি আপনি সেগুলি থেকে পালাতে শুরু করেন তবে ভুল করার একটি ছোট ঝুঁকি রয়েছে)।


4
এক্সএইচটিএমএল ( আসল এক্সএইচটিএমএল হিসাবে প্রেরিত application/xhtml+xml) সম্ভবত সর্বদা এটির প্রয়োজন হবে, যদিও।
zenak

4
এই পরিবর্তনের জন্য একটি সতর্কতা, যা এখনও আলোচনা করা হচ্ছে, বিতর্কিত হচ্ছে এবং ভুল বোঝাবুঝি হচ্ছে, এটি এতক্ষণে &ঠিক হবে বলে মনে করা হচ্ছে, যতক্ষণ না এটি " আন দ্বিপাক্ষিক" থাকে। অ্যাম্পারস্যান্ডকে দ্বিধাগ্রস্ত করার একটি সুস্পষ্ট উপায় হ'ল প্রথমে এটিকে অবকাশহীন অক্ষর এবং তারপরে একটি সেমিকোলন অনুসরণ করুন। এই অ্যাম্পারস্যান্ডটি এখন অস্পষ্ট, এবং পার্সিং ত্রুটির কারণ ঘটবে
ম্যাটি

যুক্কা যেমন বলেছিলেন, অবশ্যই সমস্ত অ্যাম্পারস্যান্ডগুলি এনকোডিং করার ঝুঁকি রয়েছে, সুতরাং আপনার হ্রেফ ইউআরএলগুলির মধ্যে একটিতে সেমিকোলন রয়েছে এমন সম্ভাবনা কতটা তা বিবেচনা করুন। বরং অসম্ভব, কারণ আমি নিশ্চিত না যে আমি কখনও একটি সেমিকোলনযুক্ত url দেখেছি seen এটি করা যায় না এমন নয়। তাই ব্যবহারিকভাবে বলতে গেলে আমার মনে হয় না যে আমাদের ব্যবহারটি &অস্পষ্ট হবে। অতএব, আমরা এটিকে href বৈশিষ্ট্যে বিনা কোডে ব্যবহার করতে থাকি।
ম্যাটি ম্যাচ

পালানোর প্রয়োজনীয়তার পুরো কারণটি স্পষ্টতই একটি অস্পষ্টতার সম্ভাবনার কারণ । এই বিশেষ সমস্যাটি এক্সএসএস আক্রমণ আক্রমণকারীদের পরিচয় করিয়ে দিচ্ছে না, খারাপ উপস্থাপনা করতে পারে, বা সময়ের 99.99% সময়ে কোনও প্রভাব ফেলতে পারে তবে এটি বিরক্ত করার কোনও কারণ নয়। সঠিকভাবে পালানোর চেষ্টা করা শক্ত এবং সর্বদা ভুল হওয়ার সম্ভাবনা থাকে।
ফিলি

5

আমি একটি নতুন উত্তর পোস্ট করছি কারণ আমি খুঁজে পেয়েছি যে জিনাকের উত্তরের যথেষ্ট উদাহরণ নেই, এইচটিএমএল এবং ইউআরআই হ্যান্ডলিংকে বিভিন্ন দিক এবং মান হিসাবে দেখায় না এবং কিছু ছোটখাটো জিনিস অনুপস্থিত রয়েছে।

লিঙ্কগুলিতে ইউআরএল সম্পর্কিত দুটি মান রয়েছে ( <a href) have

প্রথম স্ট্যান্ডার্ডটি হ'ল আরএফসি 1866 (এইচটিএমএল ২.০) যেখানে "৩.২.১। তথ্য অক্ষর" আপনি এমন অক্ষরগুলি পড়তে পারেন যা কোনও এইচটিএমএল বৈশিষ্ট্যের মান হিসাবে ব্যবহৃত হলে পালাতে হবে। (নিজস্ব বৈশিষ্ট্যগুলি বিশেষ চরিত্রগুলিকে একেবারেই মঞ্জুরি দেয় না, যেমন <a hr&ef="http://...অনুমতি দেওয়া হয় না বা হয় না <a hr&amp;ef="http://...))

পরে এটি এইচটিএমএল 4 স্ট্যান্ডার্ডের মধ্যে চলে গেছে , আপনার যে অক্ষরগুলি পালাতে হবে সেগুলি হ'ল:

<   to   &lt;
>   to   &gt;
&   to   &amp;
"   to   &quote;
'   to   &apos;

অন্য স্ট্যান্ডার্ডটি হ'ল আরএফসি 3986 "জেনেরিক ইউআরআই স্ট্যান্ডার্ড", যেখানে ইউআরএলগুলি পরিচালনা করা হয় (ব্রাউজার কোনও লিঙ্ক অনুসরণ করতে চলেছে কারণ ব্যবহারকারী এইচটিএমএল উপাদানটিতে ক্লিক করেছে)।

reserved    = gen-delims / sub-delims

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

এই অক্ষরগুলি থেকে বাঁচতে গুরুত্বপূর্ণ তাই ক্লায়েন্ট জানতে পারে যে তারা ডেটা বা একটি ডিলিমিটার উপস্থাপন করে।

অপ্রকাশিত উদাহরণ:

https://example.com/?user=test&password&te&st&goto=https://google.com

উদাহরণস্বরূপ, সম্পূর্ণরূপে আইনী ইউআরএল

https://example.com/?user=test&password&te%26st&goto=https%3A%2F%2Fgoogle.com

এইচটিএমএল বৈশিষ্ট্যের মান হিসাবে সম্পূর্ণরূপে আইনী ইউআরএল উদাহরণ:

https://example.com/?user=test&amp;password&amp;te%26st&amp;goto=https%3A%2F%2Fgoogle.com

গুরুত্বপূর্ণ পরিস্থিতিতে:

  • মান হিসাবে জাভাস্ক্রিপ্ট:

    <img src="..." onclick="window.location.href = &quot;https://example.com/?user=test&amp;password&amp;te%26st&amp;goto=https%3A%2F%2Fgoogle.com&quot;;">...</a>(হ্যাঁ, ;;সঠিক।)

  • মান হিসাবে JSON:

    <a href="..." data-analytics="{&quot;event&quot;: &quot;click&quot;}">...</a>

  • পালানো জিনিসগুলির অভ্যন্তরে পালিয়ে যাওয়া জিনিসগুলি, ডাবল এনকোডিং, প্যারামটারের ভিতরে URL এর URL ইত্যাদি ...

    http://x.com/?passwordUrl=http%3A%2F%2Fy.com%2F%3Fuser%3Dtest&amp;password=&quot;&quot;123


3

হ্যাঁ, আপনার রূপান্তর &করা উচিত &amp;

ডাব্লু 3 সি দ্বারা এই এইচটিএমএল যাচাইকারী সরঞ্জাম এই জাতীয় প্রশ্নের জন্য সহায়ক। এটি আপনাকে একটি নির্দিষ্ট পৃষ্ঠার ত্রুটি এবং সতর্কবার্তা বলবে।


1
আমি নিশ্চিত নই যে ডাব্লু 3 সি বৈধকরণকারক এটির ( &একটি href এ অবরুদ্ধ) একটি ত্রুটি হিসাবে সনাক্ত করেছে।
ক্রিসডাব্লু

6
বর্তমানে, ডাব্লু 3 সি বৈধকারক আনসকেপড এবং বৈধ হিসাবে গ্রহণ করে। এর মানে কি এই যে মানটি পরিবর্তিত হয়েছে এবং এনকোডিংয়ের আর প্রয়োজন নেই? (সর্বাধিক উত্তর এখানে পুরানো)? যদি তা হয় তবে এটি কি কেবল href বা কোনও বৈশিষ্ট্যের ক্ষেত্রে প্রযোজ্য?
ম্যাটিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.