2009-12-15 46 views
6

Tôi đang cố gắng xuất thông tin sản phẩm được lưu trữ trong cơ sở dữ liệu MySQL, nhưng nó viết ra một số ký tự lạ, giống như một viên kim cương có dấu chấm hỏi bên trong nó.Cơ sở dữ liệu MySQL PHP Các ký tự lạ

Tôi nghĩ rằng nó có thể là một vấn đề mã hóa/UTF8, nhưng tôi đã chỉ định bảng mã Tôi muốn:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

là quyền này? Tôi nên kiểm tra những gì?

+0

một đăng tại phpadvent về cùng một vấn đề nhân vật lạ: http://phpadvent.org/2009/character-sets-by-paul-reinheimer – vsr

Trả lời

20

Nếu chỉ dữ liệu mà đến từ cơ sở dữ liệu có ký tự lạ trong đó, hãy chắc chắn rằng kết nối MySQL cũng là trong UTF8 bằng cách sử dụng:

mysql_query("SET NAMES UTF8"); 

trước khi bất kỳ truy vấn khác. Nếu không, nếu các ký tự cũng xuất hiện trong các tệp 'viết tay', hãy đảm bảo rằng các tệp được lưu dưới dạng UTF-8 trong trình soạn thảo của bạn. Bạn cũng có thể thử thiết lập các tiêu đề charset qua PHP:

header('Content-type: text/html; charset=UTF-8'); 

Cũng đảm bảo rằng tất cả các trường trong bảng bạn đang truy vấn được thiết lập như một số UTF-8 biến thể, ví dụ utf8_general_ci.

+0

Giải thích hay, Tatu – BenTheDesigner

+0

mysql_query ("SET NAMES UTF8"); làm việc cho bài đăng wordpress của tôi vấn đề khai thác (dấu hỏi trong một viên kim cương). – themerlinproject

4

Lần cuối cùng tôi gặp khó khăn đó, các giải pháp tương tự như những gì Tatu Ulmanen nói, nhưng hơi khác nhau ...

Vì vậy, nếu giải pháp của ông không không hoạt động, hãy thử thay thế

mysql_query("SET NAMES UTF8"); 

với

mysql_query("SET NAMES latin1"); 
.210

Tôi nói điều này bởi vì characterset mặc định trong MySql là latin1, và đó là những gì được sử dụng hầu hết thời gian ....

hy vọng rằng sẽ giúp ...

4

Tôi giả sử bạn muốn kết quả là trong utf8

  • tiết kiệm bạn php script utf8 mã hóa
  • đảm bảo tiêu đề http của bạn (hoặc một số thẻ meta) cho sản lượng đó là utf8
  • tất cả các bảng trong MySql nên là utf8
  • cuối cùng nhưng không kém phần quan trọng, kết nối giữa máy khách và máy chủ phải là utf8. (Điều này có thể được xử lý ở đâu đó trong bối cảnh php.ini hoặc bằng cách làm cho các truy vấn sau đây đối với db:. SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'

Nếu bạn làm theo tất cả 4 điểm bạn nên không bao giờ có bất kỳ vấn đề với mã hóa bị hỏng

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