এখানে কিছু সত্যই ভাল উত্তর এবং আপনার প্রশ্নের উত্তর দেওয়ার চেষ্টা আছে। আমি কোনও এনকোডিংয়ের মাস্টার নই, তবে আপনার ডাটাবেসের মাধ্যমে পুরো খাঁটি ইউটিএফ -8 স্ট্যাকের আকাঙ্ক্ষাটি আমি বুঝতে পারি । আমি utf8mb4
টেবিল, ক্ষেত্র এবং সংযোগগুলির জন্য মাইএসকিউএল এর এনকোডিং ব্যবহার করছি।
আমার পরিস্থিতি "এইচটিএমএল ফর্মগুলি বা ইমেল নিবন্ধ লিঙ্কগুলি থেকে ডেটা আসে তখন আমি কেবলমাত্র আমার স্যানিটাইজার, বৈধকারক, ব্যবসায়িক যুক্তি এবং ইউটিএফ -8 মোকাবিলার জন্য প্রস্তুত বিবৃতি চাই to" সুতরাং, আমার সহজ উপায়ে, আমি এই ধারণাটি দিয়ে শুরু করেছি:
- এনকোডিং সনাক্ত করার চেষ্টা:
$encodings = ['UTF-8', 'ISO-8859-1', 'ASCII'];
- যদি এনকোডিং সনাক্ত করা যায় না,
throw new RuntimeException
- যদি ইনপুট থাকে তবে
UTF-8
চালিয়ে যান।
অন্যথায়, যদি হয় ISO-8859-1
বা হয়ASCII
ক। ইউটিএফ -8 এ রূপান্তর করার চেষ্টা করুন (অপেক্ষা করুন, শেষ হয়নি)
খ। রূপান্তরিত মানটির এনকোডিং সনাক্ত করুন
গ। যদি প্রতিবেদিত এনকোডিং এবং রূপান্তরিত মান দুটি হয় তবে UTF-8
চালিয়ে যান।
ঘ। অন্যথায়,throw new RuntimeException
আমার বিমূর্ত ক্লাস থেকে Sanitizer
private function isUTF8($encoding, $value)
{
return (($encoding === 'UTF-8') && (utf8_encode(utf8_decode($value)) === $value));
}
private function utf8tify(&$value)
{
$encodings = ['UTF-8', 'ISO-8859-1', 'ASCII'];
mb_internal_encoding('UTF-8');
mb_substitute_character(0xfffd); //REPLACEMENT CHARACTER
mb_detect_order($encodings);
$stringEncoding = mb_detect_encoding($value, $encodings, true);
if (!$stringEncoding) {
$value = null;
throw new \RuntimeException("Unable to identify character encoding in sanitizer.");
}
if ($this->isUTF8($stringEncoding, $value)) {
return;
} else {
$value = mb_convert_encoding($value, 'UTF-8', $stringEncoding);
$stringEncoding = mb_detect_encoding($value, $encodings, true);
if ($this->isUTF8($stringEncoding, $value)) {
return;
} else {
$value = null;
throw new \RuntimeException("Unable to convert character encoding from ISO-8859-1, or ASCII, to UTF-8 in Sanitizer.");
}
}
return;
}
কেউ একটি যুক্তি তৈরি করতে পারে যে আমার অ্যাবস্ট্রাক্ট ক্লাস থেকে আমার এনকোডিং উদ্বেগগুলি আলাদা করা উচিত Sanitizer
এবং কেবলমাত্র Encoder
একটি কংক্রিটের শিশুদের উদাহরণে কোনও বস্তু ইনজেক্ট করা উচিত Sanitizer
। যাইহোক, আমার পদ্ধতির সাথে মুখ্য সমস্যাটি হ'ল, বেশি জ্ঞান ছাড়াই আমি কেবল চাই না এমন এনকোডিংয়ের ধরণগুলি আমি প্রত্যাখ্যান করি (এবং আমি পিএইচপি এমবি_ * ফাংশনগুলির উপর নির্ভর করছি)। আরও অধ্যয়ন ছাড়া, আমি জানি না যে এটি কিছু জনগোষ্ঠীর ক্ষতি করে কিনা না (বা, যদি আমি গুরুত্বপূর্ণ তথ্য হারাতে পারি)। সুতরাং, আমার আরও শিখতে হবে। আমি এই নিবন্ধটি খুঁজে পেয়েছি।
প্রতিটি প্রোগ্রামার একেবারে কী, পাঠ্যের সাথে কাজ করার জন্য এনকোডিংগুলি এবং চরিত্রের সেট সম্পর্কে ইতিবাচকভাবে জানতে হবে
তদুপরি, এনক্রিপ্ট করা ডেটা যখন আমার ইমেল নিবন্ধকরণ লিঙ্কগুলিতে যুক্ত হয় (ব্যবহৃত হয় OpenSSL
বা mcrypt
)? এটি কি ডিকোডিংয়ের সাথে হস্তক্ষেপ করতে পারে? উইন্ডোজ -১২২২ নিয়ে কী হবে? সুরক্ষা জড়িত সম্পর্কে কী? ব্যবহারের utf8_decode()
এবং utf8_encode()
মধ্যে Sanitizer::isUTF8
সন্দেহজনক হয়।
পিএইচপি এমবি_ * ফাংশনগুলিতে লোকেরা সংক্ষিপ্ত-মন্তব্যগুলি দেখিয়েছে। আমি কখনই তদন্তের জন্য সময় নিইনি iconv
তবে এটি যদি এমবি_ * ফাংশনগুলির চেয়ে আরও ভাল কাজ করে তবে আমাকে জানান।