2011-01-18 36 views
10

Xin chào mọi người. Tôi đang phát triển một trang web mới (php5/mySQL) và đang tìm kiếm để cuối cùng có được trên bandwagon Unicode. Tôi sẽ thừa nhận để biết bên cạnh hoàn toàn không có gì về hỗ trợ Unicode vào lúc này, nhưng tôi hy vọng sẽ giải quyết điều đó với sự giúp đỡ của bạn.Hướng dẫn xử lý Unicode trong PHP5?

Sau khi tuyệt vọng uốn cong những lời bào chữa nhỏ bé, thảm hại của tôi cho các cơ Googlefu và cọ rửa trên mỗi trang trông đầy hứa hẹn với đôi mắt mới của Unicode, tôi đã đi đến kết luận rằng, trong khi không hoàn toàn được hỗ trợ, ngôn ngữ quý giá của tôi (PHP cho những người đã quên) đã thực hiện ít nhất một nỗ lực nửa assed quản lý con thú nước ngoài (và từ những gì khác tôi thấy, thành công?). Tôi cũng đã đi đến kết luận rằng

<php header('Content-Type: text/html; charset=utf-8'); ?> 

là một nơi tuyệt vời để bắt đầu và rằng tôi nên nhìn vào hỗ trợ UTF-8 kể từ khi tôi có rất nhiều không gian trên của tôi (chia sẻ, cho thời điểm này) lưu trữ.

Tuy nhiên, tôi không chắc chắn chức năng lạ này được gọi là mb_ * có nghĩa là gì hoặc cách kết hợp nó thành các hàm như strlen() và. . . thành thật vào thời điểm này tôi không biết chức năng nào khác (mà tôi không thể sống mà không có) bị ảnh hưởng.

Vì vậy, tôi đã đến với bạn SO-ites trong tìm kiếm của giác ngộ và có thể thẳng ra bối rối của tôi (nơi Unicode là có liên quan!) Não. Tôi thực sự muốn hỗ trợ nó nhưng tôi cần sự giúp đỡ nghiêm túc.

P.S .: Unicode có ảnh hưởng đến mysql_real_escape_string() hoặc bất kỳ biện pháp phòng ngừa/bảo mật XSS nào khác không? Tôi cũng cần phải cập nhật điều này!

Cảm ơn trước.

  • Thêm Javascript vào danh sách kết hợp vì tôi sẽ sử dụng kết hợp thuần túy và jQuery và không biết về hỗ trợ Unicode + ngôn ngữ này. ;)
+1

+1 để đặt câu hỏi quá ít yêu cầu. Unicode là một cái gì đó mọi lập trình viên nên hiểu. – Thanatos

+0

Không đề cập đến PHP và unicode không phải là rất đơn giản – GWW

+0

Tập trung vào sự hiểu biết bộ ký tự, mã hóa ký tự, một chút nhị phân. Đây là những thứ khá độc lập về ngôn ngữ. Một khi bạn bắt đầu nắm bắt nó, bạn sẽ nhận ra "những thiếu sót" của php không thực sự là một vấn đề lớn. – goat

Trả lời

5
  1. Chào mừng trên tàu utf8 :)
  2. Bạn chỉ nên sử dụng mb_ * chức năng trong nơi của truyền thống str * chức năng của bạn
  3. MySQL và API của nó có lâu và cũng được hỗ trợ utf8, yêu cầu duy nhất mà bạn sử dụng mã hóa khi lưu dữ liệu và kết nối. google cho 'SET NAMES utf8'
  4. Lưu ý công cụ sửa đổi 'u' cho các chức năng preg_ * cho chúng biết sử dụng chế độ unicode.
+2

PS Các tệp mã nguồn của bạn phải là utf8 KHÔNG CÓ BOM, vì nó làm cho đầu ra trước khi PHP thậm chí bắt đầu và gây ra các vấn đề "Tiêu đề đã được gửi" lạ kỳ lạ. –

+0

1) Cảm ơn bạn rất nhiều. Tôi rất vui được ở đây. :) 2) Có bất kỳ vị trí loại "cheat sheet" nào liệt kê chúng hoặc một địa điểm hiển thị hướng dẫn không? (Erm hướng dẫn sử dụng PHP erm, tốt, khá nhiều mất tôi). 3) Tôi đã tìm ra rằng ít nhất là nhiều, và làm thế nào để lưu trữ trong UTF-8. 4) '/ u', phải không?5) Tôi sử dụng Notepad ++ chạy trong Wine, do đó, để trả lời câu trả lời của bạn, tôi chọn "UTF-8 không có BOM" và điều đó sẽ giải quyết tệp mã nguồn? -Ngoài ra, tôi xin lỗi đây là một mớ hỗn độn của một câu trả lời. Tôi là loại mới để đáp ứng ở đây và không biết nếu có anyway để newline kể từ khi nhấn phím Enter dường như gửi ý kiến ​​của tôi trên đường đi của họ. – Zydeco

+0

2) xin lỗi, không bao giờ có bất kỳ tài liệu php gốc nào đủ tốt cho tôi 4) yup! 5) có, âm thanh đúng. BTW, tôi thậm chí không chắc chắn rằng các bình luận về sự hỗ trợ của dòng SO ở tất cả :) –

0

Khi làm việc với unicode:

  • sử dụng <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> trên đầu trang của bạn khi bạn ra
  • ngay sau khi bạn kết nối với cơ sở dữ liệu của bạn sử dụng truy vấn sql: mysql_query("set names 'utf8'");
  • đảm bảo tất cả các bảng và trường bắt buộc có loại đối chiếu: 'utf8_unicode_ci'
+0

Tôi đã được ấn tượng rằng một sự kết hợp của doctype thích hợp và thẻ html đã làm một công việc tốt hơn so với meta. Ai đó có thể làm rõ điều đó cho tôi không? Và như xa như kết nối với cơ sở dữ liệu, tôi nghĩ rằng nếu trang đó được mã hóa UTF-8 và cơ sở dữ liệu là UTF-8, tất cả đều ở đó? – Zydeco

+0

Tôi đã sử dụng kết hợp ở trên để làm cho mọi thứ hoạt động. Tôi cũng tìm thấy 'mysql_query ("set set' utf8 '")' cần thiết. Đối với doctype thích hợp vs meta câu hỏi làm tham khảo ý kiến ​​một chuyên gia. –

+0

lý do bỏ phiếu xuống? –

1
+0

+1 chỉ dành cho liên kết đầu tiên. Cảm ơn nhiều. – Zydeco

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