2012-02-19 25 views
27

Trong "Sách dạy nấu ăn PHP", họ nói (tr.589) để thiết lập đúng mã hóa char của dữ liệu gửi đi thành utf-8, cần phải chỉnh sửa cấu hình default_encoding thành utf-8.Đặt mã hóa mặc định của PHP thành utf-8?

Tuy nhiên, tôi không thể tìm thấy cấu hình này trong php.ini. Tôi có nên chỉ cần thêm một dòng có thể nói default_encoding = "utf-8"?

Tôi có một số ;default_charset = "iso-8859-1". Như bạn thấy (;), ngay bây giờ nó không được kích hoạt. Tôi có nên loại bỏ dấu chấm phẩy và đặt nó thành "utf-8" không? Điều đó có quan tâm đến việc mã hóa mặc định không?

Tôi cũng thấy chỉ mã hóa khác mà tôi không biết phải làm gì về:

[iconv] 
;iconv.input_encoding = ISO-8859-1 
;iconv.internal_encoding = ISO-8859-1 
;iconv.output_encoding = ISO-8859-1 
... 
; http://php.net/exif.encode-unicode 
;exif.encode_unicode = ISO-8859-15 
... 
;mssql.charset = "ISO-8859-1" 
... 
;exif.encode_unicode = ISO-8859-15 

Có bất kỳ lý do tại sao tôi không nên chỉ đơn giản là thay thế tất cả chúng với utf-8?

Trả lời

38

Bạn nên thiết lập của bạn default_charset sang UTF-8:

default_charset = "utf-8" 

(PHP Cookbook có thể có một lỗi đánh máy trong đó nếu họ yêu cầu bạn thay đổi default_encoding - Tôi chưa bao giờ nghe nói về nó.)

Bạn cũng sẽ muốn đảm bảo rằng máy chủ web của bạn được đặt thành đầu ra UTF-8 nếu bạn định xuất các ký tự mã hóa UTF-8. Trong Apache này có thể được thiết lập bởi trong file httpd.conf:

AddDefaultCharset UTF-8 

Đối với sửa đổi iconv, exif, và mssql thiết lập mã hóa, có thể bạn không cần phải thiết lập những (cài đặt của bạn đã những nhận xét ra dù sao đi nữa) nhưng tốt hơn hết là nên thay đổi tất cả thành UTF-8.

+0

Đối với Apache, tôi không có một 'http.conf' tập tin. Tôi sử dụng WAMPserver và họ gửi Apache với một tập tin 'httpd.conf'. Tôi cho rằng chúng giống nhau? Ngoài ra, đó là một dòng bạn thêm bằng tay? Không có gì về bộ ký tự trong tệp 'httpd.conf' của tôi. – JDelage

+1

thực sự là lỗi đánh máy trên phần của tôi (đã sửa). Nếu bạn không thấy tham chiếu đến 'AddDefaultCharset' trong tập tin cấu hình, bạn có thể xem qua các tập tin cấu hình (nó sẽ giống như' Include conf/extra/[something] ') để xem nó có được đặt hay không trong bất kỳ cái nào trong số đó. Nếu không, chỉ cần thêm nó vào tệp httpd.conf chính. –

+0

Có một số loại giải thích giải thích tất cả các chức năng mã hóa đó hoạt động không? – CMCDragonkai

6

Sửa đổi các dòng

;default_charset = "iso-8859-1" 

để đọc

default_charset = "utf-8" 

Về các tùy chọn khác, đừng chạm vào chúng. Tránh thiết lập mặc định, luôn luôn rõ ràng thiết lập mã hóa trong tất cả mọi thứ bạn làm

  • kết nối cơ sở dữ liệu,
  • đọc và ghi các file,
  • chuyển đổi với iconv.

Ngoài ra, hãy cẩn thận về việc mã hóa trong đó tệp PHP của bạn được lưu, đảm bảo chúng nằm trong UTF-8, đặc biệt nếu chúng chứa các chuỗi được hiển thị hoặc so sánh.

-2

thay đổi từ * default_charset = "utf-8" * để * default_charset = "iso-8859-1" * công trình cho tôi (tôi sử dụng máy chủ web Apache và Linux OS). vì một số lý do khi tôi sử dụng utf-8, một số ký tự không hiển thị tốt. Họ hoặc là thay đổi một số dấu vuông hoặc dấu chấm hỏi tùy thuộc vào trình duyệt web được sử dụng.

+3

Nếu bạn lưu trữ tệp .php dưới dạng ISO-8859-1 và bộ ký tự mặc định của PHP được đặt thành UTF-8, bạn sẽ gặp sự cố. Tuy nhiên, giải pháp đúng ở đây là không đặt PHP thành ISO-8859-1 nhưng để đảm bảo trình chỉnh sửa của bạn lưu trữ tệp .php của bạn dưới dạng UTF-8. ISO-8859-1 là một kết nối kém cho Web * World Wide *. – RavuAlHemio

3

Tôi đã gặp sự cố với truy vấn mysql của mình rằng nó sẽ không nhận ra một số dấu ngoặc mềm, vì vậy truy vấn sẽ không thành công.Tôi nghĩ rằng nó có thể là tập tin php và như vậy, cho đến khi tôi phát hiện ra rằng bằng cách sử dụng pdo để gọi mysql tôi đã phải thêm bộ ký tự. Điều kỳ lạ là máy chủ trước đó tôi đã sử dụng hoạt động tốt!

$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8'; 
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^ 
+0

@Marcos khi bạn chỉnh sửa câu trả lời tôi thấy chữ in đậm đã bị mất và được dịch thành "**" ... Tên người viết thư không phải là văn bản mà bạn nhìn thấy. Kể từ đó đánh dấu đậm. – Miguel

+0

Đã sửa lỗi, @miguel, xin lỗi –

0

Để giải quyết tôi đã thay đổi "UTF-8" thành "UTF-8" (không có dấu gạch ngang), giải quyết vấn đề thay thế.

CentOS

Izaias Moura

0

Ở cấp htaccess (tệp .htaccess) chỉ thị php nên php_value default_charset UTF-8

Các vấn đề liên quan