আপনি কতটা ক্ষমাশীল হতে চান তার উপর নির্ভর করে ক্যোরিয় স্ট্রিংটিকে পার্সিং করা মনে হয় তার চেয়ে কিছুটা জটিল।
প্রথমত, ক্যোরির স্ট্রিংটি আসকি বাইট। আপনি এই বাইটগুলিতে একবারে পড়েন এবং এগুলিকে অক্ষরে রূপান্তর করেন। চরিত্রটি যদি হয়? অথবা & এর পরে এটি প্যারামিটার নামের শুরুতে সংকেত দেয়। অক্ষরটি যদি = হয় তবে এটি পরামিতি মানটির সূচনা করে। অক্ষরটি যদি% হয় তবে এটি কোনও এনকোডড বাইটের সূচনা করার ইঙ্গিত দেয়। এখানেই এটি জটিল হয়ে ওঠে।
আপনি যখন% চরটিতে পড়েন আপনাকে পরবর্তী দুটি বাইট পড়তে হবে এবং সেগুলি হেক্স অঙ্ক হিসাবে ব্যাখ্যা করতে হবে। তার মানে পরবর্তী দুটি বাইট হবে 0-9, AF বা এএফ। আপনার বাইট মান পেতে এই দুটি হেক্স ডিজিটকে একসাথে আঠালো করুন। তবে মনে রাখবেন, বাইট অক্ষর নয় । অক্ষরগুলি এনকোড করার জন্য আপনাকে কী এনকোডিং ব্যবহার করা হয়েছিল তা জানতে হবে। অক্ষর ইউটিএফ -8 তে একইভাবে এনকোড করে না যেমন এটি আইএসও -8859-1-তে ঘটে। সাধারণভাবে প্রদত্ত চরিত্রের সেটটির জন্য কী এনকোডিং ব্যবহৃত হয়েছিল তা জানা অসম্ভব। আমি সর্বদা ইউটিএফ -8 ব্যবহার করি কারণ আমার ওয়েবসাইটটি সর্বদা ইউটিএফ -8 ব্যবহার করে সমস্ত কিছু পরিবেশন করার জন্য কনফিগার করা থাকে তবে বাস্তবে আপনি নিশ্চিত হতে পারবেন না। কিছু ব্যবহারকারী-এজেন্ট আপনাকে অনুরোধে অক্ষর এনকোডিংটি বলবে; আপনার যদি সম্পূর্ণ HTTP অনুরোধ থাকে তবে আপনি এটি পড়ার চেষ্টা করতে পারেন। আপনার যদি সবে বিচ্ছিন্নভাবে url থাকে তবে শুভকামনা।
যাইহোক, ধরে নিই যে আপনি ইউটিএফ -8 বা কিছু অন্যান্য মাল্টি-বাইট অক্ষর এনকোডিং ব্যবহার করছেন, এখন আপনি যখন একটি এনকোডড বাইট ডিকোড করেছেন আপনাকে পরবর্তী বাইটটি ক্যাপচার না করা পর্যন্ত এটিকে আলাদা করে রাখতে হবে। আপনার একসাথে থাকা সমস্ত এনকোডযুক্ত বাইট প্রয়োজন কারণ আপনি একবারে এক বাইট সঠিকভাবে url- ডিকোড করতে পারবেন না। একসাথে থাকা সমস্ত বাইটগুলি আলাদা করে রাখুন এবং আপনার চরিত্রটিকে পুনর্গঠন করতে একবারে এগুলি সমস্ত ডিকোড করুন।
এছাড়াও আপনি যদি সুস্থ হয়ে উঠতে চান এবং ব্যবহারকারী-এজেন্টদের জন্য অ্যাকাউন্ট করতে চান যা ইউআরএলগুলি মঙ্গাল করে। উদাহরণস্বরূপ, কিছু ওয়েবমেল ক্লায়েন্টগুলি জিনিসগুলি ডাবল-এনকোড করে। অথবা? & = অক্ষর দ্বিগুণ করুন (উদাহরণস্বরূপ http://yoursite.com/blah??p1==v1&&p2==v2
:)। আপনি যদি দয়া করে এর সাথে ডিল করার চেষ্টা করতে চান তবে আপনার পার্সারে আরও যুক্তি যুক্ত করতে হবে।
getQuery()
করতে পারেন, আপনি কী পেয়েছেন এবং আউটপুট হিসাবে আপনি কী পেতে চান?