วิธีการเปลี่ยนการเข้ารหัสเริ่มต้นเป็น UTF-8 สำหรับ Apache


138

ฉันใช้ บริษัท โฮสติ้งและจะแสดงรายการไฟล์ในไดเรกทอรีหากไฟล์index.htmlไม่อยู่ที่นั่นจะใช้ iso-8859-1 เป็นการเข้ารหัสเริ่มต้น

หากเซิร์ฟเวอร์คือ Apache มีวิธีตั้งค่า UTF-8 เป็นค่าเริ่มต้นแทนหรือไม่

อัปเดต: นอกจากนี้ฉันพบว่าใช้ DOCTYPE เป็น HTML 3.2 จริง ๆ แล้วไม่มีชุดอักขระเลย ... ดังนั้นจึงไม่ได้ตั้งค่าการเข้ารหัสใด ๆ แต่มีวิธีเปลี่ยนเป็นใช้ UTF-8 หรือไม่?

คำตอบ:


176

ใน httpd.conf เพิ่ม (หรือเปลี่ยนแปลงหากมีอยู่แล้ว):

AddDefaultCharset utf-8

6
จะเพิ่มไฟล์นี้ที่ไหนในไฟล์ที่ไหนก็ได้?
systemovich

5
@ Geoffrey ใช่ หากยังไม่ได้มีคุณสามารถวางไว้ที่ใดก็ได้ อย่างไรก็ตามฉันมักจะสั่งทุกคำสั่ง "กำหนดเอง" ที่ด้านล่างของไฟล์ด้วยเหตุผลหลายประการ (แทนที่คำสั่งที่มีอยู่ก่อนสั่งซื้อและเพียงเพื่อดูสิ่งที่ฉันเปลี่ยนจากการตั้งค่าสต็อก)
MartinodF

6
เพิ่ม AddDefaultCharset utf-8 ไปยัง. htaccess - ใช้งานได้ดีสำหรับฉัน (ถ้าคุณไม่มีสิทธิ์เข้าถึง httpd.conf)
richardwhitney

เป็นกรณีที่ละเอียดอ่อนหรือไม่
Mike Stoddart

6
เนื่องจากคำตอบนี้มาจาก 2009: ใน Ubuntu 18 คุณเปลี่ยนการกำหนดค่านี้ใน/etc/apache2/conf-available/charset.conf
WoodrowShigeru

55

เพิ่มลงในของคุณ.htaccess:

IndexOptions +Charset=UTF-8

หรือหากคุณมีสิทธิ์ผู้ดูแลระบบคุณสามารถตั้งค่าได้ทั่วโลกโดยการแก้ไขhttpd.confและเพิ่ม:

AddDefaultCharset UTF-8

(คุณสามารถใช้AddDefaultCharsetใน.htaccessเกินไป แต่ก็จะไม่ส่งผลกระทบต่อรายชื่อไดเรกทอรี Apache สร้างวิธีการที่.)


4
นี่เป็นโซลูชันที่ยอดเยี่ยมและมีการบุกรุกน้อยกว่าการแก้ไขไฟล์ httpd.conf
Andrew Swift

1
บนเซิร์ฟเวอร์ของฉัน.htaccessสามารถส่งผลกระทบต่อไดเรกทอรีย่อยทั้งหมดเช่นกันอาจ apache จะค้นหา.htaccessไดเรกทอรีหลักจนถึงไดเรกทอรีรากของโฟลเดอร์เว็บไซต์
nonopolarity

2
ใช่นั่นเป็นวิธีที่.htaccessทำงานบนเซิร์ฟเวอร์ทั้งหมด - มันมีผลต่อไดเรกทอรีย่อยทั้งหมดเช่นกัน อย่างไรก็ตามหน้ารายชื่อไดเรกทอรีที่สร้างโดย Apache ไม่สามารถบังคับให้ UTF-8 ได้โดยใช้.htaccess(AFAIK)
Mathias Bynens

9
โปรดทราบว่าการเปลี่ยนการตั้งค่าทั่วเซิร์ฟเวอร์ผ่าน.htaccessไฟล์นั้นเป็นเรื่องที่ไม่ดี บั๊กนั้นยากต่อการติดตามเมื่อมีการกระจายการตั้งค่าเซิร์ฟเวอร์ไปยังไฟล์ต่าง ๆ มีประสิทธิภาพเล็กน้อยเช่นกัน: แต่ละไฟล์ที่ร้องขอ Apache ต้องอ่าน.htaccessไฟล์ไดเรกทอรีและ.htaccessไฟล์ทั้งหมดของไดเรกทอรีหลัก .htaccessดังนั้นจึงควรใช้สำหรับการตั้งค่าเฉพาะไดเรกทอรี (เช่นการป้องกันการเข้าถึงไดเรกทอรีเฉพาะ) หรือเมื่อไม่มีความเป็นไปได้อย่างแน่นอนที่จะได้รับสิทธิ์ผู้ดูแลระบบ
Robbert

2
โหวตขึ้นดัชนี IndexOptions + Charset = UTF-8 ขอบคุณมาก!
mTorres

28

ดูAddDefaultCharset Directive , AddCharset Directiveและบทความนี้

AddDefaultCharset utf-8

แต่ตอนนี้ฉันต้องใช้ตัวอักษรจีนแล้ว ก่อนหน้านี้ฉันแปลตัวอักษรจีนเป็นรหัส Unicode และรวมไว้ในเอกสารโดยใช้ &#แฮ็ค แต่จะมีประโยชน์สำหรับหน้าเว็บที่มีอักขระไม่กี่ตัวเท่านั้น

มีวิธีที่ดีกว่าในการทำเช่นนั้น: เข้ารหัสข้อมูลชุดอักขระในชื่อไฟล์และ apache จะส่งออกส่วนหัวของการเข้ารหัสที่เหมาะสมตามนั้น นี่เป็นไปได้ที่ต้องขอบคุณ AddCharsetบรรทัดในไฟล์ conf เช่นบรรทัดด้านล่าง:

conf/httpd.conf:

AddCharset UTF-8 .utf8

ดังนั้นหากคุณมีไฟล์ที่ชื่อลงท้าย.html.utf8ด้วย apache จะให้บริการหน้าราวกับว่ามันถูกเข้ารหัสใน UTF-8 และจะถ่ายโอนคำสั่งการเข้ารหัสตัวอักษรที่เหมาะสมในส่วนหัวตามลำดับ


23

สถานที่เข้าสู่AddDefaultCharset UTF-8 /etc/apache2/conf.d/charsetอันที่จริงมันมีอยู่แล้ว คุณเพียงแค่ต้องไม่แสดงข้อคิดเห็นโดยลบสิ่งที่#กล่าวมาก่อนหน้า


2
/etc/apache2/conf.d/charsetไม่มีไฟล์เช่นเป็น มันเป็นไฟล์รวมที่กำหนดเองโดยการกระจายของคุณ ในฐานะที่เป็นไฟล์อื่น ๆ httpd.confที่ไม่ได้
Evi1M4chine

1
มัน/etc/apache2/conf-enabled/charset.confเกี่ยวกับการกระจายของฉัน (Ubuntu 16.4) ยังไม่ทำงาน
Alator

23

ใน. htaccess เพิ่มบรรทัดนี้:

AddCharset utf-8 .html .css .php .txt .js

นี่สำหรับผู้ที่ไม่มีสิทธิ์เข้าถึงไฟล์ conf ของเซิร์ฟเวอร์ มันเป็นอีกเรื่องหนึ่งที่ต้องลองเมื่อความพยายามอื่นล้มเหลว

เท่าที่ปัญหาประสิทธิภาพเกี่ยวกับการใช้. htaccess ฉันไม่ได้เห็นสิ่งนี้ เวลาในการโหลดหน้าเว็บโดยทั่วไปของฉันคือ 150-200 mS โดยมีหรือไม่มี. htaccess

ประสิทธิภาพที่ดีคืออะไรหากหน้าของคุณแสดงผลไม่ถูกต้อง เซิร์ฟเวอร์ที่ใช้ร่วมกันส่วนใหญ่ไม่อนุญาตให้ผู้ใช้เข้าถึงไฟล์กำหนดค่าซึ่งเป็นสถานที่ที่ต้องการเพื่อเพิ่มชุดอักขระ


ฉันไม่สามารถอธิบายได้ แต่วิธีนี้ใช้ได้ผลสำหรับฉันเท่านั้น นั่นเป็นสาเหตุที่ +1 ขนาดใหญ่
Skalár Wag

1
ตามที่กล่าวถึงโดย @Robbert ก่อนหน้านี้ - หากคุณยังไม่ได้ใช้.htaccessไฟล์อย่าเพิ่งเริ่มตอนนี้ มีเหตุผลด้านประสิทธิภาพและการจัดการว่าทำไมจึงเป็นความคิดที่ไม่ดี (tm)
สัญญาณ 15

เมื่อคุณไม่รวมส่วนขยาย AddCharset จะถูกนำไปใช้กับประเภทเนื้อหา text / html และ text / plain
เข้าใจผิด

สิ่งนี้ใช้ได้สำหรับฉันในขณะที่คำเตือนทั้งหมดข้างต้นไม่ได้ +1
Alator

คำตอบที่ยอมรับมีผลกับ tex / html และ text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV

10

ฉันไม่แน่ใจว่าคุณมีสิทธิ์เข้าถึง Apache config (httpd.conf) หรือไม่ แต่คุณควรจะสามารถตั้งค่าคำสั่ง AddDefaultCharset ได้ ดู:

http://httpd.apache.org/docs/2.0/mod/core.html

ค้นหาโมดูล mod_mime.c และตรวจสอบให้แน่ใจว่าได้ตั้งค่าต่อไปนี้:

AddDefaultCharset utf-8 

หรือเทียบเท่า Apache 1.x docs ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset )

อย่างไรก็ตามจะใช้งานได้เมื่อ "ประเภทเนื้อหาการตอบสนองคือ text / plain หรือ text / html"

คุณควรตรวจสอบให้แน่ใจว่าหน้าของคุณมีชุดอักขระเช่นกัน ดูสิ่งนี้สำหรับข้อมูลเพิ่มเติม:

http://www.w3.org/TR/REC-html40/charset.html


8

สิ่งนี้ยังไม่ได้ทดสอบ แต่อาจใช้งานได้

ในไฟล์. htaccess ของคุณ:

<Files ~ "\.html?$">  
     Header set Content-Type "text/html; charset=utf-8"
</Files>

อย่างไรก็ตามสิ่งนี้จะต้องใช้ mod_headers บนเซิร์ฟเวอร์


ที่ได้ผลสำหรับฉันในขณะที่วิธีแก้ปัญหาที่เลือกไม่ได้ ขอบคุณ! ที่จริงแล้วฉันไม่จำเป็นต้องห่อมันด้วย<Files>แท็ก
Geremia

8

เพื่อความสมบูรณ์บน Apache2 บน Ubuntu คุณจะพบชุดอักขระเริ่มต้นใน charset.conf ด้วย conf-available

ยกเลิกการใส่เครื่องหมายบรรทัด

AddDefaultCharset UTF-8

3

เมื่อไฟล์ HTML ทั้งหมดอยู่ใน UTF-8 และไม่มีเมตาแท็กสำหรับประเภทเนื้อหาฉันสามารถตั้งค่าเริ่มต้นที่จำเป็นสำหรับไฟล์เหล่านี้ที่ Apache 2.4 จะส่งได้โดยการเพิ่มคำสั่งทั้งสอง:

AddLanguage ru .html
AddCharset UTF-8 .html

3

เพียงคำใบ้หากคุณมีชื่อไฟล์ยาวเป็น utf-8: โดยค่าเริ่มต้นพวกเขาจะถูกย่อให้เหลือ 20 ไบต์ดังนั้นอาจเกิดขึ้นได้ว่าตัวอักษรตัวสุดท้ายอาจ "ตัดครึ่ง" และไม่รู้จักอย่างถูกต้อง จากนั้นคุณอาจต้องการตั้งค่าต่อไปนี้:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth การตั้งค่าจะป้องกันการทำให้ชื่อไฟล์ของคุณสั้นลงทำให้สามารถแสดงและอ่านได้อย่างถูกต้อง

ตามที่ผู้ใช้คนอื่นพูดถึงแล้วควรเพิ่มสิ่งนี้ทั้งในhttpd.confหรือapache2.conf(ถ้าคุณมีสิทธิ์ของผู้ดูแลระบบ) หรือใน.htaccess(ถ้าคุณไม่มี)


2

ปล่อยให้มันว่างเปล่า: 'default_charset' in WHM :::::: default_charset =''

ps - ใน WHM ไป --------) หน้าแรก»การกำหนดค่าบริการ»ตัวแก้ไขการกำหนดค่า PHP ----) คลิก 'โหมดขั้นสูง' ----) ค้นหา 'default_charset' และปล่อยให้ว่าง ---- เพียง ไม่มีอะไรไม่ใช่ utf8 ไม่ใช่ ISO


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.