2012-05-23 28 views

Trả lời

3

Bởi vì chức năng chuỗi PHP dựa trên dây byte; họ không có kiến ​​thức về mã hóa ký tự. Vì vậy, trong một cái gì đó như UTF-8, nơi một nhân vật có thể mất nhiều hơn một byte, nó không hoạt động theo cách bạn muốn nó để:

<?php 
$x = 'Подмосковные вечера'; 
print(strlen($x)."\n");  # 37, not 19 
print(substr($x,0,1)."\n"); # �, not П 
print(substr($x,0,2)."\n"); # П, not По 
?> 

Nhìn vào multibyte string functions nếu bạn muốn thao tác phi Văn bản -ASCII.

0

Bạn cần phải kiểm tra mã hóa ký tự. Về cơ bản, bạn có một chuỗi được mã hóa ở một định dạng và bạn đang sử dụng nó ở định dạng khác.

Đối với nội dung quốc tế (và có vẻ như bạn đang làm điều đó) thì tôi sẽ sử dụng UTF-8: - Trong tệp HTML của bạn thêm vào đầu (gần đầu) - Trong PHP của bạn, hãy đảm bảo bạn đang xử lý tất cả các chuỗi như UTF-8 - Nếu bạn cũng có một cơ sở dữ liệu, hãy đảm bảo cơ sở dữ liệu, các bảng và các trường được cấu hình là UTF-8 (cảnh báo: thực hiện thay đổi này có thể làm hỏng dữ liệu xuất hiện mà không cần nhập/xuất!). - Nếu bạn đang đọc các tệp mẫu có các ký tự đặc biệt, hãy đảm bảo các tệp đó là UTF-8. (Nếu không có ký tự đặc biệt, thì AscII bình thường sẽ làm)

Đó là câu trả lời đơn giản. Có rất nhiều điều để đọc về mã hóa ký tự - chỉ cần Google nó.

(giải pháp thay thế, sử dụng ASCII, nhưng chuyển đổi tất cả mọi thứ để mã ký tự web thân thiện. Nhưng đó là phức tạp hơn để có được tất cả các mã đúng, đặc biệt là nếu xử lý đầu vào người sử dụng.)

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