2011-12-20 24 views
7

Tôi nghe nói PHP có hỗ trợ Unicode rất kém. Vì vậy, những gì nó cần để làm cho một PHP 5 xây dựng ứng dụng Unicode được hỗ trợ theo PHP 5.3+? Chuỗi mbstring sẽ là lựa chọn duy nhất ở đây? Làm cách nào để Facebook hoặc Yahoo nhận được giới hạn PHP này?Unicode trong PHP?

+1

Làm theo tất cả các hướng dẫn được đăng tại đây. Tôi đề nghị bạn tải xuống notepad ++ và đảm bảo lưu tệp dưới dạng utf8. Nhiều người chỉnh sửa có thói quen xấu về tiết kiệm như ansi mà là crap – OptimusCrime

+0

@OptimusCrime Tôi nghĩ rằng đó là thói quen xấu của lập trình viên, không thay đổi điều đó trong các cài đặt, có thể cho gần như bất kỳ trình soạn thảo nào (ít nhất là với cú pháp tô sáng) . – feeela

Trả lời

8

PHP có không hỗ trợ ở mức độ thấp đối với bất kỳ mã hóa. Nhưng tất cả điều đó thực sự có nghĩa là nó không quan tâm đến một mức độ ngôn ngữ . Các chuỗi trong PHP là các chuỗi byte thô, có thể nằm trong bất kỳ mã hóa nào bạn thích. Khi xử lý các chuỗi nhiều byte, bạn cần phải cẩn thận để sử dụng hàm xử lý chuỗi bên phải thay vì có thể thay đổi trực tiếp luồng byte. Vì vậy, chỉ "không hỗ trợ" Unicode là nó không bao gồm khái niệm mã hóa thành ngôn ngữ chính, nhưng bạn vẫn có thể làm việc với bất kỳ mã hóa nào hoàn toàn tốt bằng cách thao tác các chuỗi bằng cách sử dụng hàm chuỗi thích hợp.

Thực ra, nếu bạn chỉ quan tâm một chút để giữ mọi thứ trong UTF-8 mọi lúc, bạn sẽ hiếm khi phải lo lắng về bất kỳ điều gì liên quan đến mã hóa. PHP hoạt động tốt với Unicode.

Để có phạm vi phủ sóng rộng lớn về chủ đề này, vui lòng xem What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text.

+0

+1 cho liên kết này –

1

PHP hỗ trợ Unicode kém, nhưng không thể thực hiện được, bạn chỉ cần cẩn thận với các chức năng bạn đang sử dụng và hỗ trợ cho unicode. Trang này có một bản tóm tắt tốt về hỗ trợ unicode cho các chức năng và tiện ích khác nhau http://www.phpwact.org/php/i18n/utf-8

+3

Bài viết được liên kết có chút kích động. Bài viết được viết trên 2009-10-21 và rõ ràng là đề cập đến một phiên bản PHP đã lỗi thời, được bổ sung mà không có phần mở rộng mbstring (hầu hết các gói Linux được biên dịch sẵn trước đây [ví dụ: Debian dành cho Debian hoặc Ubuntu] bao gồm mbstring- sự mở rộng). Chỉ cần sử dụng phần mở rộng đó. – feeela

0

Nếu dữ liệu đến từ một bảng sử dụng UTF-8, bạn chỉ cần đặt tiêu đề và meta chính xác và bạn nên ok (không cần mã hóa bất cứ điều gì):

<?php 
header ('Content-type: text/html; charset=utf-8'); 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 

</body> 
</html> 
+0

Điều này sẽ không thay đổi bất cứ điều gì về xử lý chuỗi thông qua PHP, ví dụ: trong các phương thức như 'substr()'. Xem thêm liên kết trên câu trả lời của chaft… – feeela

-1

Các mbstring-biến sau đây cần được thiết lập thông qua php.ini hoặc vhost cấu hình (httpd.conf; không hoạt động cho mỗi thư mục [qua .htaccess]):

mbstring.language = Neutral 
mbstring.internal_encoding = UTF-8 
mbstring.func_overload = 7 

Chỉ để lại mã như cũ chắc chắn Editor/IDE của bạn chỉ lưu tệp dưới dạng UTF-8 và phân phối mọi thứ dưới dạng UTF-8 (thông qua thẻ HTTP-header hoặc META).

Xem thêm: PHP Manual – Multibyte String – Function Overloading Feature