বিভিন্ন php এনকোডিং

  1. লেখক
  2. x64 (উর ওআইআই)

নবীন স্ক্রিপ্ট লেখক এনকোডিং হিসাবে যেমন একটি জিনিস যত্ন না।  অতএব, সাইটগুলিতে আপনি কখনও কখনও একটি ভয়ানক জগাখিচুড়ি খুঁজে পেতে পারেন, যখন ডেটাবেস থেকে ডেটা এককোডিংয়ে প্রাপ্ত হয়, পৃষ্ঠাটি অন্যটিতে গঠিত হয় এবং সার্ভারটি তৃতীয় দেওয়া হয়।  ফলস্বরূপ, যদি পৃষ্ঠাটি ডিক্রিপ্ট করা যেতে পারে তবে কমপক্ষে ২ বার।  সুতরাং, কেন এমন একটি সমস্যা হয় এবং কিভাবে এটি পরাস্ত করা

নবীন স্ক্রিপ্ট লেখক এনকোডিং হিসাবে যেমন একটি জিনিস যত্ন না। অতএব, সাইটগুলিতে আপনি কখনও কখনও একটি ভয়ানক জগাখিচুড়ি খুঁজে পেতে পারেন, যখন ডেটাবেস থেকে ডেটা এককোডিংয়ে প্রাপ্ত হয়, পৃষ্ঠাটি অন্যটিতে গঠিত হয় এবং সার্ভারটি তৃতীয় দেওয়া হয়। ফলস্বরূপ, যদি পৃষ্ঠাটি ডিক্রিপ্ট করা যেতে পারে তবে কমপক্ষে ২ বার। সুতরাং, কেন এমন একটি সমস্যা হয় এবং কিভাবে এটি পরাস্ত করা?

রাশিয়ান সেগমেন্টে প্রায়শই আপনি তথাকথিত উইন্ডোজ-এনকোডিং খুঁজে পেতে পারেন। এটি আলাদাভাবে কল করুন: উইন্ডোজ -1251, সিপি 1২51 অথবা এমনকি আন্সি। পরবর্তীটি utf-8। আপনি ইউনিকোড নামটিও খুঁজে পেতে পারেন তবে এটি সম্পূর্ণ সঠিক নয়, যেহেতু ইউনিকোড সমগ্র গোষ্ঠীর সাধারণ নাম (utf-8, utf-16, utf-32)। এবং একটি খুব জনপ্রিয় বিরলতা koi8-r বা কেবল koi-8 - একবার জনপ্রিয় লিনাক্স কোডিং। অবশ্যই, রাশিয়ান সেগমেন্টে অন্য কিছু দেখা সম্ভব, কিন্তু এটি লেখক কর্তৃক একটি "আনুগত্য"।

Utf-8 এবং অন্যান্যদের মধ্যে প্রধান পার্থক্য (প্রাথমিকভাবে উইন্ডোজ -1251 এবং কোই 8-আর) শেষ বাইট এবং সর্বাধিক সংখ্যক অক্ষর যা এই এনকোডিংগুলি ব্যবহার করে প্রতিনিধিত্ব করা যেতে পারে 256 পর্যন্ত সীমাবদ্ধ। এটি ছাড়াও এটি এই লেখাটির সম্পূর্ণ উপস্থাপনা যথেষ্ট হতে পারে না। এবং এইচটিএমএল জন্য একটি সমাধান খুঁজে পাওয়া যায় নি - তথাকথিত nememonics ব্যবহার। উদাহরণস্বরূপ:

© - & কপি;

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

সুতরাং, প্রাথমিক অবস্থার সবচেয়ে আরামদায়ক সেট নিম্নরূপ: ডাটাবেসের কোডিং, পিএইচপি স্ক্রিপ্ট এবং এইচটিএমএল পৃষ্ঠা / জেএস স্ক্রিপ্টগুলি একই হওয়া উচিত। অবশ্যই, আপনি বিভিন্ন ব্যবহার করতে পারেন, কিন্তু এই ক্ষেত্রে বিভ্রান্তির একটি ঝুঁকি আছে। কোন কোড পৃষ্ঠা ব্যবহার করা হয় তা কোন ব্যাপার না। যদি শুধুমাত্র রাশিয়ানভাষী শ্রোতার জন্য সাইটটি থাকে তবে উইন্ডোজ -1251 যথেষ্ট পরিমাণে হবে। অন্যথায়, utf-8 যৌক্তিক পছন্দ হবে। প্রথম বিকল্পটি কম বা কম স্পষ্ট। মাল্টিবিট এনকোডিং কিছু অঙ্গভঙ্গি প্রয়োজন হবে।

ইউটিএফ -8 এর সাথে কাজ করার সময় স্ট্যান্ডার্ড নোটপ্যাড নোটপ্যাড কাজ করবে না ! সত্যই এই সম্পাদক, এই এনকোডিংয়ের একটি ফাইল সংরক্ষণ করার সময়, শুরুতে 3 অক্ষর, তথাকথিত বোম (বাইট অর্ডার চিহ্ন) যোগ করে, যা একটি ফাইল খোলার সময় এনকোডিং নির্ধারণ করতে ব্যবহার করা যেতে পারে। অন্য সম্পাদক নির্বাচন করা ভাল: notepad2 অথবা নোটপ্যাড ++ । সেটিংসে আপনি স্বাক্ষর ছাড়া সংরক্ষণ করতে হবে।

পরবর্তী গুরুত্বপূর্ণ পদক্ষেপ ডাটাবেসের সাথে কাজ করছে। এটি অত্যন্ত আকাঙ্ক্ষিত যে বেস / টেবিল / পাঠ্য ক্ষেত্রের এনকোডিং স্ক্রিপ্ট এনকোডিংয়ের সাথে মিলে যায় (এটি cp1251 বা utf-8 হতে পারে, অথবা অন্য কিছু)। ডাটাবেস থেকে তথ্য "zyuk" আকারে প্রাপ্ত হয়, সম্ভবত এনকোডিং সংযোগ ডাটাবেসের মধ্যে সংরক্ষিত তথ্য থেকে ভিন্ন। নিম্নোক্ত প্রশ্নটি পরিস্থিতি অতিক্রম করতে সহায়তা করবে (ডাটাবেসের সাথে সংযোগ করার পরে অবিলম্বে কার্যকর করুন):

যদি সাইটটি উইন্ডোজ -1251 ব্যবহার করে তবে আপনাকে এটি উল্লেখ করতে হবে - cp1251।

সাধারণভাবে, কিছুই কঠিন নেই। শুধুমাত্র, স্ট্যান্ডার্ড php ফাংশন multibyte স্ট্রিংগুলির সাথে কাজ করার জন্য ডিজাইন করা হয় না। কিন্তু এমন স্ট্যান্ডার্ড লাইব্রেরি রয়েছে যা পরিস্থিতি সংশোধন করতে সহায়তা করবে: iconv এবং mbstring । নিয়মিত এক্সপ্রেশন জন্য, একটি প্রয়োজনীয় সুইচ যা সংশোধনকারী সঙ্গে সক্রিয় করা হয়।

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

শিরোনাম ('সামগ্রী-প্রকার: পাঠ্য / html; অক্ষর = utf-8');

যদি একক-বাইট এনকোডিং ব্যবহার করা হয়, তবে অক্ষরটির মান ভিন্ন হবে - উইন্ডোজ -1251 । তার পরে, সমস্যা থাকা উচিত নয়।

Php মধ্যে utf-8 এর সাথে কাজ করার কিছু সহজ উদাহরণ:

উদাহরণ 1: iconv, লাইন প্রতি অক্ষর সংখ্যা

$ s = 'স্ট্রিং'; # স্ট্রিং utf-8 $ cnt1 = strlen ($ s); # মান $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8') ধারণ করবে; # সঠিক মান, 6

উদাহরণ 2: mbstring, একটি স্ট্রিং অক্ষর সংখ্যা

$ s = 'স্ট্রিং'; # স্ট্রিং utf-8 $ cnt1 = strlen ($ s); # মান $ 12 cnt2 = mb_strlen ($ s, 'UTF-8') ধারণ করবে; # সঠিক মান, 6

উদাহরণ 3: নিয়মিত এক্সপ্রেশন, অনুসন্ধান এবং প্রতিস্থাপন

$ s = 'স্ট্রিং'; # লাইন utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # প্রতিস্থাপন হবে না $ s = preg_replace ('/ p / iu', 'd', $ s); # ফলাফল শব্দ ডক

আমি সংশোধনকারী কেস-অসংবেদক অনুসন্ধান নির্ধারণ করে, এবং আপনি সংশোধনকারী নিয়মিত এক্সপ্রেশন ইঞ্জিনটি utf-8 স্ট্রিংগুলির সাথে কাজ করার জন্য বলে।

যদি কেউ বলে যে php utf-8 এর সাথে কাজ করতে পারে না, এটি ভুল হবে। কয়েক বছর ধরে আমি এই এনকোডিংয়ে আমার সমস্ত প্রকল্পগুলি করেছি এবং এতে কোন সমস্যা নেই। সার্চ ইঞ্জিন নিজেদের দীর্ঘ এই বিস্ময়কর এনকোডিং ব্যবহার করেছেন।

লেখক

অফলাইন 11 ঘন্টা

x64 (উর ওআইআই)

মন্তব্য: 2846 প্রকাশনা: 395 নিবন্ধন: 02-04-2009