3 টি ফর্মগুলির জন্য রুবিতে রুবিতে _স্নোমান পরম কী?


174

রুবেল অন রেলস 3 এ (বর্তমানে বিটা 4 ব্যবহার করছে) আমি দেখতে পাচ্ছি the ( ইউনিকোড \ x9731) এর মান সহ একটি লুকানো ক্ষেত্র রয়েছে যা সহায়ক form_tagবা form_forসহায়তাকারীদের ব্যবহার করার সময় দেখায়।_snowman

তো, এটা কিসের জন্য?


2
এটি একটি 'ডকুমেন্টেশন' টাইপ প্রশ্নোত্তর - আমি এখানে একটি উত্তর খুঁজতে চেষ্টা করেছি এবং প্রতিশ্রুতিবদ্ধ বার্তাগুলির মাধ্যমে খনন শেষ করেছি যাতে আমি বুঝতে পেরেছিলাম যে স্নোম্যান সম্পর্কে যারা ভাবছেন তাদের জন্য আমি এটি এখানে ভাগ করব ...
ম্যাথু সেভেজ

আরো দেখুন এই
মাস্টারমাস্টিক

উত্তর:


308

ইন্টারনেট এক্সপ্লোরারকে (5, 6, 7 এবং 8) ইউনিকোড হিসাবে এর পরামিতিগুলিকে এনকোড করতে বাধ্য করার জন্য এই প্যারামিটারটি ফর্মগুলিতে যুক্ত করা হয়েছিল ।

বিশেষত, ব্যবহারকারী যদি ব্রাউজারের এনকোডিংটি লাতিন -1 এ সরিয়ে দেয় তবে এই বাগটি ট্রিগার করা যেতে পারে। কোনও ব্যবহারকারী কেন এতটা উন্মাদ বলে মনে হচ্ছে এই গুগল অনুসন্ধানটি পরীক্ষা করে দেখুন । ব্যবহারকারী একবার ওয়েব সাইটটি লাতিন -১ মোডে রাখার পরে, যদি তারা ল্যাটিন -১ এবং ইউনিকোড (উদাহরণস্বরূপ, é বা ç, নামে প্রচলিত) উভয় হিসাবে বোঝা যায় এমন অক্ষর ব্যবহার করে তবে ইন্টারনেট এক্সপ্লোরার সেগুলি লাতিন ভাষায় এনকোড করবে -1।

এর অর্থ হ'ল কোনও ব্যবহারকারী যদি "চ গুয়েভারা" অনুসন্ধান করেন তবে এটি সার্ভার-সাইডে ভুলভাবে আসবে। রুবি ১.৯-এ, পাঠ্য যখন অনিবার্যভাবে নিয়মিত এক্সপ্রেশন ইঞ্জিনে প্রবেশ করে তখন এটি একটি এনকোডিং ত্রুটির ফলস্বরূপ। রুবি ১.৮-এ এটি ব্যবহারকারীর জন্য ভাঙ্গা ফলাফল ঘটবে।

একটি প্যারামিটার তৈরি করে যা কেবলমাত্র ইউনিকোড চরিত্র হিসাবে আইই দ্বারা বোঝা যায়, আমরা IE কে গ্রহণ-চরসেট বৈশিষ্ট্যটি দেখতে বাধ্য করছি, যা পরে এটি ইউটিএফ -8 হিসাবে সমস্ত অক্ষরকে এনকোড করতে বলে, এমনকি এমন একটি অক্ষরও যা এনকোড করা যায় লাতিন -১ এ।

মনে রাখবেন যে রুবি 1.8, এটা অত্যন্ত আপনার হল UTF-8 ডাটাবেসের মধ্যে ল্যাটিন -1 ডেটা পেতে তুচ্ছ (যেহেতু কিছুই সমগ্র স্ট্যাকের চেক বাইট ব্যবহারকারী যেকোনো সময় পাঠানো বৈধ হল UTF-8 টি অক্ষর আছে)। ফলস্বরূপ, রুবি অ্যাপ্লিকেশনগুলির (এবং পিএইচপি অ্যাপ্লিকেশন ইত্যাদি) ব্যবহারকারীর মুখোমুখি এই বাগটি প্রদর্শন করা অত্যন্ত সাধারণ এবং ব্যবহারকারীদের জন্য পলিয়েটিভ ব্যবস্থা হিসাবে এনকোডিংটি পরিবর্তন করার চেষ্টা করা অত্যন্ত সাধারণ।

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


1
যদি এটি _ মতবাদের মতো স্বচ্ছ প্যারামিটারটি শেষ করে, তবে এটি সম্ভবত অনেক কম বিভ্রান্তিকর হবে। ঠিক কী করতে হবে এতো পাগল জিনিস।
tadman

1
ইহুদা বিস্তারিত প্রতিক্রিয়াটির জন্য ধন্যবাদ - যদিও আমি মনে করি তুষারমানকে রাখা সবচেয়ে ভাল ফলাফল এটি সম্ভবত সেইসব বোকামি জিনিসগুলির মধ্যে একটি 'উদ্যোগ' বেছে নেবে - 'এই তুষারমানুষ কী জিনিস?!?! এটি একটি খেলা, খেলা নয়! '
ম্যাথু সেভেজ

1
@ ম্যাথু, অদ্ভুতভাবে আপনি ঠিক বলেছেন। তবে সমাধানটি বেশ চিত্তাকর্ষক বলে আমি মনে করি।
জেপি সিলভাশি

10
এরপরে স্নোম্যানকে utf8 নামের একটি লুকানো ইনপুট দ্বারা "& # x2713" মান সেট করে প্রতিস্থাপন করা হয়েছিল। আমি আমার ভাষা স্যুইচারের জন্য একটি ফর্ম_ট্যাগ ব্যবহার করেছি এবং প্রচুর ব্যতিক্রম পেতে শুরু করেছি কারণ কোনও ক্রলারকে এই মানটির সাথে সমস্যা বলে মনে হয় এবং ফর্মের একটি নির্বাচনের বিকল্পের মানের সাথে utf8 পরামিতি এবং এর মানটি ভুলভাবে স্বাক্ষর করে।
ক্রিস্টার ফার্নস্ট্রোম

56

ইন্টারনেট এক্সপ্লোরার 5 সমর্থন করার জন্য এবং এটির রূপগুলির জন্য ইউটিএফ -8 ব্যবহার করতে উত্সাহিত করার জন্য এটি এখানে।

এখানে দেখা প্রতিশ্রুতিবদ্ধ বার্তাটি নীচে সেটির বিবরণ দেয়:

বেশ কয়েকটি পরিচিত ওয়েব এনকোডিংয়ের সমস্যাগুলি ঠিক করুন:

  • সমস্ত ফর্মের উপর গ্রহণযোগ্য-অক্ষর নির্দিষ্ট করুন। সমস্ত সাম্প্রতিক ব্রাউজারগুলি, পাশাপাশি আই 5 +, ফর্ম পরামিতিগুলির জন্য নির্দিষ্ট এনকোডিংটি ব্যবহার করবে
  • দুর্ভাগ্যক্রমে, আই 5 + যদি ফর্মের মানগুলির মধ্যে কমপক্ষে একটি অক্ষর পৃষ্ঠার অক্ষরে না থাকে তবে গ্রহণযোগ্য-অক্ষরটির দিকে নজর দেবে না। যেহেতু ব্যবহারকারী ডিফল্ট
    চরসেটটি ওভাররাইড করতে পারে (যা রেলগুলি ইউটিএফ -8 এ সেট করে) তাই আমরা ইউনিকোড অক্ষরযুক্ত একটি লুকানো ইনপুট সরবরাহ করি, আইইকে গ্রহণযোগ্য-অক্ষরটি দেখতে বাধ্য করি।
  • এখন যে ওয়েব ইনপুটগুলির সিংহভাগটি ইউটিএফ -8, আমরা ইনবাউন্ড প্যারামিটারগুলি ইউটিএফ -8 এ সেট করি। এটি ASCII-8BIT এবং
    UTF-8 এর মধ্যে বেমানান এনকোডিংয়ের অনেকগুলি কেস দূর করবে ।
  • আপনি নিরাপদে প্যারামগুলি উপেক্ষা করতে পারেন [: _ স্নোম্যান]

সংক্ষেপে, আপনি এই প্যারামিটারটি নিরাপদে উপেক্ষা করতে পারেন।

তবুও, আমি নিশ্চিত না যে আমরা ইন্টারনেট এক্সপ্লোরার ৫ এর মতো পুরানো প্রযুক্তিগুলিকে কেন সমর্থন করছি you আপনি যদি আমাকে জিজ্ঞাসা করেন তবে এটি রেলের সিদ্ধান্ত নেওয়ার পক্ষে খুব অ-রুবি বলে মনে হচ্ছে।


7
উদ্ধৃতিটি "আই 5 +" বলে, তাই সম্ভবত নতুন আইই সংস্করণগুলিতেও সমস্যা দেখা দেয়?
ফিলিপ

5
আরও দীর্ঘ প্রতিক্রিয়ার জন্য, দয়া করে github.com/rails/rails/commit/… (এছাড়াও নীচে আমার প্রতিক্রিয়াটি দেখুন) দেখুন
ইয়াহুদা কাটজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.