सर्वर कंटेंट-टाइप हैडर की परवाह किए बिना ब्राउज़र को HTML वेबसाइट का कैरेक्टर एन्कोडिंग कैसे कहें?


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> ...

ब्राउज़र (Google क्रोम, फ़ायरफ़ॉक्स) में डिस्क से फ़ाइल खोलना ठीक काम करता है।

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

(अंतिम पंक्ति देखें)। ब्राउज़र तब ISO-8859-1 का उपयोग करता है जो कि एक अवांछित परिणाम है।

क्या HTML डॉक्यूमेंट के भीतर से सर्वर हेडर को ब्राउजर में भेजने का कोई सामान्य तरीका है?

जवाबों:


6

"क्या HTML दस्तावेज़ के भीतर से सर्वर हेडर को ब्राउज़र में भेजने के लिए ओवरराइड करने का एक सामान्य तरीका है?"

AFAIK नहीं, आप वही करते हैं जो आप पहले से कर सकते हैं। हैडर के माध्यम से परिभाषित चार्ट मेटा टैग में आपकी परिभाषा को ट्रम्प करता है।

यदि आपके पास सर्वर तक पहुंच है, जैसे कि Apache, तो यह इस कथन द्वारा कॉन्फ़िगर किया गया है (टिप्पणी लाइनें देखें):

# 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

[अपडेट करें]

दूसरे w3d की टिप्पणी के लिए यहां आपको अपाचे सर्वर के लिए htaccess-Directives के माध्यम से चारसेट बदलने के कुछ तरीके मिलेंगे ।


2
+1 HTTP हेडर HTML मेटा टैग को ओवरराइड करता है। यदि @hakre की सर्वर-साइड तक पहुंच है, तो वे प्रति पृष्ठ के आधार पर सामग्री-प्रकार हेडर को भी ओवरराइड कर सकते हैं।
MrWhite


जवाब के लिए धन्यवाद। @Korpela: हाँ, मेरे पास HTML स्पेक्स के साथ मेमोरी थी। यह ठीक उसी तरह से है जैसे मुझे इसकी आवश्यकता है :(?
hakre

.Htaccess के बारे में (क्षमा करें, यह शायद एक नया प्रश्न होना चाहिए), क्या यह ;charset=...http हेडर से भी निकालना संभव है । साइट बहुत अच्छी तरह से काम करती है Content-Type: text/html, विभिन्न फाइलों में सर्वर पर अलग-अलग एनकोडिंग होते हैं। (मुझे लगता है कि यह संभव नहीं है, इसलिए भी, क्योंकि मुझे लगता है कि मैंने कुछ हफ्तों पहले इसकी तलाश की थी लेकिन परिणाम काफी अंतिम नहीं था)। बस मामले में आप कुछ प्रकाश आगे बहा सकते हैं।
हकरे

@hakre यदि Apache का ForceType निर्देश आपके लिए काम करता है, तो इसे एक <Files> कंटेनर और व्यक्तिगत रूप से फ़ाइलों या कुछ विशेष निर्देशिकाओं में रखें। बस "; चारसेट =" भाग को माइम प्रकार के बाद छोड़ दें, फिर इसे ऐसा करना चाहिए।
initall

3

आपको अपने रूट में कुछ इस तरह सेट करना चाहिए

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

3

नहीं, यह HTML के भीतर से संभव नहीं है। सर्वर प्रतिक्रिया हेडर दस्तावेज़ के मेटा-टैग पर पूर्वता लेते हैं। जैसा कि 5.2.2 में निर्दिष्ट है। वर्ण एन्कोडिंग निर्दिष्ट करना - HTML 4.01 विशिष्टता :

योग करने के लिए, किसी दस्तावेज़ के चरित्र एन्कोडिंग का निर्धारण करते समय (निम्न से उच्चतम प्राथमिकता)

  1. एक HTTP "चारसेट" पैरामीटर "सामग्री-प्रकार" फ़ील्ड में।
  2. "सामग्री-प्रकार" के लिए "http-equiv" सेट के साथ एक मेटा घोषणा और "charset" के लिए एक मूल्य सेट।
  3. चारसेट विशेषता एक तत्व पर सेट है जो एक बाहरी संसाधन को नामित करता है।

तो इसके लिए सर्वर-साइड पर कॉन्फ़िगरेशन की आवश्यकता होती है। हालाँकि जैसा कि अध्याय जारी है:

उपयोगकर्ता एजेंट एक तंत्र प्रदान कर सकते हैं जो उपयोगकर्ताओं को गलत "चारसेट" जानकारी को ओवरराइड करने की अनुमति देता है। हालांकि, यदि कोई उपयोगकर्ता एजेंट इस तरह का तंत्र प्रदान करता है, तो उसे केवल ब्राउज़िंग के लिए और संपादन के लिए प्रस्ताव देना चाहिए, न कि गलत "चारसेट" पैरामीटर के साथ चिह्नित वेब पृष्ठों के निर्माण से बचने के लिए।

मेरे मामले में सर्वर के कंटेंट-टाइप हेडर में सही माइम-टाइप होते हैं लेकिन गलत चारसेट

जैसा कि यह निकला, मेरे अपाचे 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=...भाग नहीं )। यह एचटीएमएल मेटा टैग चलाता के साथ संयोजन में कहा ब्राउज़र heuristics पर कब्जा करने चारसेट मेटा टैग से। वेबसाइट ठीक से डिकोड की गई है।

के साथ परीक्षण किया गया:

  • Google Chrome v। 22.0.1229.94
  • फ़ायरफ़ॉक्स वी। 16.0.1
  • लिंक्स संस्करण 2.8.7rel.1 (05 जुलाई 2009)

इन तीन ब्राउज़रों को मूल कॉन्फ़िगरेशन और अब (फ़ेडोरा 17 पर) काम करने में समस्या थी।

  • ओपेरा 12.02
  • Internet Explorer 6 (Win XP SP3)

पहली जगह में समस्या नहीं थी। दोनों सर्वर से ISO-8859-1 सेटिंग पर मेटा-टैग से UTF-8 पसंद कर रहे थे ।

  • नेटस्केप 2.01 गोल्ड

यूटीएफ -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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.