সার্ভার সামগ্রীর ধরণের শিরোনাম নির্বিশেষে ব্রাউজারকে এইচটিএমএল ওয়েবসাইটের চরিত্রের এনকোডিং কীভাবে বলা যায়?


9

আমার একটি HTML পৃষ্ঠা রয়েছে যা সঠিকভাবে (ডিস্কের উপর প্রকৃতির এনকোডিং এর সাথে মেলে) এর বিষয়বস্তুর ধরণটি ঘোষণা করে :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content=
    "text/html; charset=utf-8">
    <title> ...

ব্রাউজারে ডিস্ক থেকে ফাইল খোলার (গুগল ক্রোম, ফায়ারফক্স) ভাল কাজ করে।

HTTP- র মাধ্যমে এটির অনুরোধ করে, ওয়েবসভারটি একটি ভিন্ন সামগ্রী-প্রকারের শিরোনাম প্রেরণ করে:

$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 10:57:13 GMT
...
Content-Type: text/html; charset=ISO-8859-1

(শেষ লাইন দেখুন) এরপরে ব্রাউজারটি প্রদর্শন করতে আইএসও -8859-1 ব্যবহার করে যা একটি অযাচিত ফলাফল।

এইচটিএমএল ডকুমেন্টের মধ্যে থেকে সার্ভারের শিরোনামগুলি ব্রাউজারে পাঠানো ওভাররাইড করার কি সাধারণ উপায় আছে?

উত্তর:


6

"এইচটিএমএল ডকুমেন্টের মধ্যে থেকে সার্ভার শিরোনামগুলি ব্রাউজারে পাঠানো ওভাররাইড করার কোনও সাধারণ উপায় কি?"

আফাইক না, আপনি ইতিমধ্যে যা করতে পারেন তা করুন। শিরোনামের মাধ্যমে সংজ্ঞায়িত চরসেটটি আপনার সংজ্ঞাটি মেটা ট্যাগে ফেলে দেয়।

আপনার যদি সার্ভারটিতে অ্যাক্সেস থাকে, যেমন অ্যাপাচি, এটি এই বিবৃতিটি দ্বারা কনফিগার করা হয়েছে (মন্তব্যের লাইনগুলি দেখুন):

# Read the documentation before enabling AddDefaultCharset.
# In general, it is only a good idea if you know that all your files
# have this encoding. It will override any encoding given in the files
# in meta http-equiv or xml encoding tags.

#AddDefaultCharset UTF-8

[হালনাগাদ]

এখানে ডাব্লু 3 ডি এর মন্তব্যে আপনি অ্যাপাচি সার্ভারের জন্য htaccess-Directives এর মাধ্যমে চরসেটটি পরিবর্তন করার কিছু উপায় খুঁজে পাবেন ।


2
এইচটিএমএল মেটা ট্যাগকে ওভাররাইড করে +1 HTTP শিরোনাম head যদি @hakre এর সার্ভার সাইডে অ্যাক্সেস থাকে তবে তারা প্রতি পৃষ্ঠার ভিত্তিতে সামগ্রী-প্রকারের শিরোনামকে ওভাররাইড করতে পারে।
মিঃউইট

3
ঠিক আছে, এখানে আদর্শিক রেফারেন্সটি উল্লেখ করেছে যে এইচটিটিপি শিরোনাম ট্রাম্প মেটা ট্যাগ: w3.org/TR/REC-html40/charset.html#h-5.2.2
Jukka K. Korpela

উত্তরের জন্য ধন্যবাদ. @ করপেলা: হ্যাঁ, আমার এইচটিএমএল স্প্যাসের সাথে স্মৃতি ছিল। ঠিক অন্যান্য উপায় বৃত্তাকার আমি এটা প্রয়োজন হিসাবে :( আছে।
hakre

.Htaccess সম্পর্কে (দুঃখিত, পরিবর্তে এটি একটি নতুন প্রশ্ন হওয়া উচিত), এটি ;charset=...কি এইচটিপি শিরোনাম থেকেও মুছে ফেলা সম্ভব ? সাইটটি খুব ভালভাবে কাজ Content-Type: text/htmlকরে, সার্ভারে বিভিন্ন ফাইলের বিভিন্ন এনকোডিং থাকে। (আমিও আশঙ্কা করি এটিও সম্ভব নয়, কারণ আমি মনে করি যে কয়েক সপ্তাহ আগে আমি এটি সন্ধান করেছি তবে ফলাফল চূড়ান্ত হয়নি)। সেক্ষেত্রে আপনি সামান্য কিছুটা হালকা করে ফেলতে পারেন।
hakre

@hakre যদি অ্যাপাচের ফোর্সটাইপ নির্দেশিকা আপনার জন্য কাজ করে তবে এটিকে একটি <ফাইল> কনটেইনার এবং পৃথকভাবে ফাইল বা নির্দিষ্ট ডিরেক্টরিতে নাম দিন। মাইম টাইপের পরে কেবল "; চরসেট =" অংশটি ছেড়ে দিন, এটি করা উচিত।
initall

3

আপনার রুটে এই জাতীয় কিছু সেট করা উচিত। Htaccess

<FilesMatch "\.(htm|html|xhtml|xml|php)$">
    AddDefaultCharset utf-8
</FilesMatch>

3

না, এটি HTML এর মধ্যে থেকে সম্ভব নয় not সার্ভারের প্রতিক্রিয়া শিরোনাম নথির মেটা-ট্যাগের চেয়ে বেশি গুরুত্ব দেয়। এটি 5.2.2 তে বর্ণিত হিসাবে অক্ষর এনকোডিং নির্দিষ্টকরণ - এইচটিএমএল 4.01 নির্দিষ্টকরণ :

সংক্ষেপে, ডকুমেন্টের অক্ষর এনকোডিং নির্ধারণ করার সময় (সর্বোচ্চ অগ্রাধিকার থেকে সর্বনিম্ন পর্যন্ত) মেনে চলা ব্যবহারকারী এজেন্টগুলি অবশ্যই নিম্নলিখিত অগ্রাধিকারগুলি পালন করবেন:

  1. একটি "কন্টেন্ট-টাইপ" ক্ষেত্রে একটি HTTP "চরসেট" পরামিতি।
  2. "কন্টেন্ট-টাইপ" এ "HTTP সমতুল্য" সেট সহ একটি মেটার ঘোষণা এবং "চারসেট" এর জন্য একটি মান সেট।
  3. চরসেট অ্যাট্রিবিউট সেট করে এমন কোনও উপাদান যা একটি বাহ্যিক সংস্থানকে মনোনীত করে।

সুতরাং এটির জন্য সার্ভার-সাইডে কনফিগারেশন প্রয়োজন। তবে অধ্যায়টি যেমন চলছে:

ব্যবহারকারী এজেন্টরা এমন একটি প্রক্রিয়া সরবরাহ করতে পারে যা ব্যবহারকারীদের ভুল "চরসেট" তথ্য ওভাররাইড করতে দেয়। যাইহোক, যদি কোনও ব্যবহারকারী এজেন্ট এই জাতীয় প্রক্রিয়া সরবরাহ করে তবে এটি কেবল ব্রাউজিংয়ের জন্য এবং সম্পাদনার জন্য নয়, একটি ভুল "চরসেট" পরামিতি দ্বারা চিহ্নিত ওয়েব পৃষ্ঠাগুলি তৈরি এড়াতে হবে should

আমার ক্ষেত্রে সার্ভারের সামগ্রী-প্রকারের শিরোনামটিতে সঠিক মাইম-টাইপ রয়েছে তবে ভুল অক্ষর রয়েছে

দেখা গেল, আমার অ্যাপাচি httpd কনফিগারেশনটি AddDefaultCharsetচালু করেছে যা ; charset=ISO-8859-1অংশটি যুক্ত করছে । ওয়েবসাইটগুলির মূল ডিরেক্টরিতে .htaccessনিম্নলিখিত লাইনটি স্থাপন করা :

AddDefaultCharset Off

চরসেটের তথ্য সরানো হয়েছে:

$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 15:07:52 GMT
...
Content-Type: text/html

(শেষ লাইন দেখুন, কোন ; charset=...অংশ নেই)। এটি এইচটিএমএল মেটা ট্যাগের সংমিশ্রণে উল্লিখিত ব্রাউজারের হিউরিস্টিককে মেটা ট্যাগ থেকে চরসেটটি গ্রহণ করতে ট্রিগার করে । ওয়েবসাইটটি সঠিকভাবে ডিকোড করা হয়েছে।

এর সাথে পরীক্ষিত:

  • গুগল ক্রোম বনাম 22.0.1229.94
  • ফায়ারফক্স বনাম 16.0.1
  • লিংক সংস্করণ 2.8.7rel.1 (05 জুলাই ২০০৯)

এই তিনটি ব্রাউজারের আসল কনফিগারেশন এবং এখন কাজ করার ক্ষেত্রে সমস্যা ছিল (সমস্ত ফেডোরা 17 তে)।

  • অপেরা 12.02
  • ইন্টারনেট এক্সপ্লোরার 6 (উইন এক্সপি এসপি 3)

প্রথম জায়গায় সমস্যা হয়নি। উভয়ই সার্ভার থেকে আইএসও -8859-1 সেটিংসের তুলনায় মেটা-ট্যাগ থেকে ইউটিএফ -8 পছন্দ করছিলেন ।

  • নেটস্কেপ ২.০১ গোল্ড

ইউটিএফ -8 সমর্থন করে না তাই সার্ভার সেটিং এবং মেটা-ট্যাগ নির্বিশেষে সর্বদা ওয়েস্টার্ন (ল্যাটিন 1) বেছে নেওয়া হয় ।


1

এখানে যা বলা হয়েছিল তা ছাড়াও, আমি সমস্ত পৃষ্ঠায় একই চরসেটটি ব্যবহার করার চেষ্টা করতাম - UTF-8তবে (তবে যদি প্রায় সব কিছু হয় তবে এটি iso-8859-1ব্যবহার করুন)।

কোনও ফাইলের চরসেটটি দ্রুত পরীক্ষা করতে, আপনি চেষ্টা করতে পারেন:

file --mime-type --mime-encoding {filename}

গাছের সমস্ত ফাইলের অক্ষর পরীক্ষা করতে, আপনি চেষ্টা করতে পারেন:

find . -type f -exec file --mime-type --mime-encoding '{}' \;

বা ( fileকেবলমাত্র আদেশটি কেবল একবার কল করা ):

find . -type f -print | file --mime-type --mime-encoding -f-

সংক্ষিপ্তসার পেতে, কমান্ডের -bবিকল্পটি ব্যবহার করুন file(ফাইলের নাম বাদ দিতে) এবং ফলাফলটি পাইপ করুন sort | uniq -c

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.