HTML এনটিটি এনকোডার / ডিকোডার

HTML এনটিটি এস্কেপ এবং আনএস্কেপ করুন। < > & " ' কে named এনটিটিতে রূপান্তর করুন, ঐচ্ছিকভাবে সব নন-ASCII অক্ষর এনকোড করুন এবং named বা numeric রেফারেন্সকে আবার টেক্সটে ডিকোড করুন।

টেক্সটকে এস্কেপ করুন যাতে এটি HTML-এর ভিতরে নিরাপদ থাকে, বা এনটিটিগুলোকে আবার অক্ষরে রূপান্তর করুন। সেই দিকে রূপান্তর করতে যেকোনো বক্সে টাইপ করুন। মিনিমাল মোড শুধু সঠিকতার জন্য গুরুত্বপূর্ণ পাঁচটি অক্ষর এস্কেপ করে; এক্সটেন্ডেড মোড সর্বোচ্চ সামঞ্জস্যের জন্য প্রতিটি নন-ASCII অক্ষরও এনকোড করে।

সাধারণ এনটিটি

অক্ষর Named Numeric
& &amp; &#38;
< &lt; &#60;
> &gt; &#62;
" &quot; &#34;
' &#39; &#39;
\u{00A0} &nbsp; &#160;
\u{00A9} &copy; &#169;
\u{20AC} &euro; &#8364;

HTML এনটিটি এবং কেন এস্কেপিং গুরুত্বপূর্ণ

HTML ভাঙা পাঁচটি অক্ষর

একটি HTML পার্সার < কে একটি ট্যাগের শুরু এবং & কে একটি এনটিটি রেফারেন্সের শুরু হিসেবে পড়ে। আপনার কন্টেন্টে এগুলোর যেকোনোটি থাকলে, পার্সার এটিকে টেক্সট হিসেবে আচরণ করা বন্ধ করে দেয়। এস্কেপিং অক্ষরটিকে এমন একটি রেফারেন্স দিয়ে প্রতিস্থাপন করে যা পার্সার আবার মূল গ্লিফে সমাধান করে, কখনোই এটিকে কাঠামোগত অর্থ না দিয়ে।

HTML-এ সত্যিই শুধু পাঁচটি অক্ষর এস্কেপ করা প্রয়োজন:

  • & হয়ে যায় &amp; — আগে হতে হবে, নইলে আপনি বাকি সবকিছু ডাবল-এস্কেপ করবেন
  • < হয়ে যায় &lt;
  • > হয়ে যায় &gt;
  • " হয়ে যায় &quot; — ডাবল-কোটেড অ্যাট্রিবিউট মানের ভিতরে প্রয়োজন
  • ' হয়ে যায় &#39; — সিঙ্গেল-কোটেড অ্যাট্রিবিউট মানের ভিতরে প্রয়োজন

এলিমেন্ট টেক্সটে কঠোরভাবে শুধু & এবং < প্রয়োজন। আপনার টেক্সট অ্যাট্রিবিউটের ভিতরে পড়তে পারলেই অন্য তিনটি গুরুত্বপূর্ণ হয়ে ওঠে, এবং যেহেতু এস্কেপিংয়ের সময় আপনি সাধারণত এটি নিয়ন্ত্রণ করেন না, পাঁচটি এস্কেপ করাই নিরাপদ অভ্যাস।

Named, দশমিক এবং হেক্সাডেসিমাল রেফারেন্স

একই অক্ষর তিনভাবে লেখা যায়। একটি নন-ব্রেকিং স্পেস হল &nbsp;, &#160; বা &#xA0;। Named রেফারেন্স সবচেয়ে পঠনযোগ্য কিন্তু HTML5 তালিকায় প্রায় ২,২০০টি এন্ট্রি রয়েছে এবং পুরোনো পার্সাররা অনেক কম জানে, তাই অস্পষ্ট নামগুলো একটি পোর্টেবিলিটি ঝুঁকি। Numeric রেফারেন্স যেকোনো Unicode কোড পয়েন্টের জন্য কাজ করে এবং সর্বদা নিরাপদ। HTML5-এর প্রতিটি named রেফারেন্সে শেষের সেমিকোলন প্রয়োজন; &amp-এর মতো কয়েকটি লিগ্যাসি নাম এখনও ব্যাকওয়ার্ডস সামঞ্জস্যের জন্য এটি ছাড়া পার্স হয়, কিন্তু সেটির উপর নির্ভর করা একটি অপেক্ষমাণ বাগ।

এস্কেপিং স্যানিটাইজিং নয়

এস্কেপিং-ই ক্রস-সাইট স্ক্রিপ্টিং বন্ধ করে: যদি <script> সম্বলিত ইউজার ইনপুট &lt;script&gt;-এ এস্কেপ করা হয়, ব্রাউজার আক্ষরিক টেক্সট রেন্ডার করে এবং কিছুই এক্সিকিউট করে না। কিন্তু এস্কেপিং শুধু সঠিক কনটেক্সটে ঘটলেই কাজ করে। একটি <script> ব্লকের ভিতরে, একটি style অ্যাট্রিবিউটের ভিতরে, বা URL-এ HTML এস্কেপিং যথেষ্ট নয় — প্রতিটির নিজস্ব এনকোডিং প্রয়োজন। এবং এস্কেপিং একবারই প্রয়োগ করতে হবে, আউটপুটের সময়। ইনপুটে এবং আবার আউটপুটে এস্কেপ করলে &amp;lt; এবং দৃশ্যমান আবর্জনা তৈরি হয়।

কখন এক্সটেন্ডেড মোড দরকার

নন-ASCII অক্ষর এস্কেপ করা কোনো আধুনিক স্পেসিফিকেশনের প্রয়োজন নেই। একটি UTF-8 ডকুমেন্টে é এবং সরাসরি থাকতে পারে, এবং সেটিই সাধারণত ভালো পছন্দ: এটি ছোট, বেশি পঠনযোগ্য এবং খুঁজে পাওয়া সহজ। এক্সটেন্ডেড মোড বিদ্যমান সেই ক্ষেত্রে যেখানে বাইট স্ট্রিমকে এমন একটি চ্যানেল অতিক্রম করতে হয় যা নন-ASCII বিকৃত করে — কিছু লিগ্যাসি ইমেইল টেমপ্লেট, পুরোনো CMS ফিল্ড, অস্পষ্ট ডিক্লেয়ারড এনকোডিংসহ XML পাইপলাইন, বা একটি বিল্ড স্টেপ যা Latin-1-এ আটকে আছে। আপনি যদি শেষ থেকে শেষ এনকোডিং নিয়ন্ত্রণ করেন, মিনিমাল মোডেই থাকুন।

নন-ব্রেকিং স্পেস ফাঁদ

&nbsp; হল U+00A0, সাধারণ স্পেস U+0020 থেকে একটি ভিন্ন অক্ষর। এটি লাইন ব্রেক প্রতিরোধ করে এবং ব্রাউজারদের হোয়াইটস্পেসের ধারা সংকুচিত করতে বাধা দেয়, এ কারণেই WYSIWYG এডিটররা এটি উদারভাবে নির্গত করে। দেখতে একই রকম হওয়ায়, এটি নীরবে স্ট্রিং তুলনা, কিছু ইঞ্জিনে \s দিয়ে লেখা রেগুলার এক্সপ্রেশন এবং CSV আমদানি ভেঙে দেয়। যদি একটি মান সঠিক দেখায় কিন্তু মেলাতে অস্বীকার করে, একটি অবাঞ্ছিত নন-ব্রেকিং স্পেসের জন্য পরীক্ষা করুন।

ওপেন-সোর্স নোটিশ: সাধারণ স্ট্রিং এবং কোড-পয়েন্ট অপারেশন দিয়ে বাস্তবায়িত। কোনো থার্ড-পার্টি লাইব্রেরি ব্যবহার করা হয়নি।

সাধারণ প্রশ্নাবলী

আমাকে কি গ্রেটার-দ্যান চিহ্ন এস্কেপ করতে হবে?
কঠোরভাবে না — টেক্সটে একটি একাকী > দ্ব্যর্থহীন এবং ঠিকঠাক পার্স হয়। এটি প্রথা অনুযায়ী এস্কেপ করা হয় কারণ এর কোনো খরচ নেই এবং জেনারেট করা মার্কআপে বিভ্রান্তি এড়ায়, বিশেষ করে যখন আউটপুট পরে ব্রাউজারের চেয়ে কঠোর টুল দিয়ে প্রসেস করা হয়।
কেন & কে আগে এস্কেপ করতে হবে?
কারণ প্রতিটি অন্য এস্কেপ সিকোয়েন্স একটি অ্যাম্পারস্যান্ড দিয়ে শুরু হয়। যদি আপনি & এস্কেপ করার আগে < কে &lt; দিয়ে বদলাতেন, পরের পাস সেই অ্যাম্পারস্যান্ডকে &amp; এ পরিণত করত এবং পৃষ্ঠায় আপনার শেষ হতো &amp;lt; দিয়ে।
XSS প্রতিরোধের জন্য এস্কেপিং কি যথেষ্ট?
শুধু HTML টেক্সট এবং অ্যাট্রিবিউট কনটেক্সটের জন্য, এবং শুধু আউটপুটে প্রয়োগ করলে। JavaScript, CSS বা URL-এ ইনজেক্ট করা কন্টেন্টের বদলে সেই ভাষার এস্কেপিং নিয়ম প্রয়োজন। এস্কেপিং একটি স্তর, সম্পূর্ণ প্রতিরক্ষা নয়।
Named বা numeric এনটিটি — কোনটি ব্যবহার করা উচিত?
Numeric রেফারেন্স সর্বত্র সমর্থিত এবং যেকোনো কোড পয়েন্টের জন্য কাজ করে। Named রেফারেন্স সবাই চেনে এমন কয়েকটির জন্য বেশি পঠনযোগ্য। বাস্তবে পাঁচটি মূল অক্ষরের জন্য named এবং অস্বাভাবিক কিছুর জন্য numeric ব্যবহার করুন।
উচ্চারণ চিহ্নযুক্ত অক্ষর কি এনকোড করা উচিত?
UTF-8 ডকুমেন্টে না, যা মূলত সব আধুনিক ওয়েব কন্টেন্ট। সেগুলো সরাসরি লিখুন। শুধু তখনই এক্সটেন্ডেড মোড ব্যবহার করুন যখন আপনার পাইপলাইনের কিছু অংশকে নন-ASCII বাইট অক্ষত বহন করার জন্য বিশ্বাস করা যায় না।
সাধারণ স্পেস এবং &nbsp; এর মধ্যে পার্থক্য কী?
নন-ব্রেকিং স্পেস হল কোড পয়েন্ট U+00A0। এটি দেখতে একই রকম কিন্তু লাইন র্যাপিং প্রতিরোধ করে এবং সংলগ্ন হোয়াইটস্পেসের সাথে সংকুচিত হয় না। তুলনার উদ্দেশ্যে এটি একটি স্বতন্ত্র অক্ষরও, যা এটিকে সূক্ষ্ম বাগের একটি সাধারণ উৎস করে তোলে।