2010-08-05 29 views
14

Tôi muốn không cho phép đầu vào UTF-8 nhất định (phía máy chủ), ví dụ: các ngôn ngữ phía đông, trong đó ví dụ đầu vào có thể là "伊".Làm cách nào để phát hiện các ký tự không phải phương Tây?

Tuy nhiên, tôi muốn tiếp tục hỗ trợ các ký tự latin hoặc "latin-like" khác, chẳng hạn như welsh ŵ và ŷ, do đó, checking against latin-1 is not possible.

Tùy chọn của tôi là gì? (nếu ngôn ngữ cụ thể, ưu tiên PHP)

Cảm ơn rất nhiều.


Lập luận: Trình duyệt hỗ trợ cho rất nhiều nhân vật phi phương Tây thường thiếu (ví dụ như trên một trình duyệt khác tôi chỉ thấy một hộp trong câu hỏi ở trên), vì vậy đối với những thứ như tên hiển thị đôi khi nó là thích hợp để hạn chế nó thậm chí nếu nó không phù hợp với cơ quan thông điệp

+2

Bạn có phiền nếu tôi hỏi tại sao bạn không muốn cho phép một số ngôn ngữ trên một trang web quốc tế hóa? – Borealid

+0

Câu hỏi công bằng. Nó chỉ cần thiết cho một trường của một bảng; phần còn lại của trang web sẽ hỗ trợ nó. – HoboBen

+2

Vậy tập hợp các ký tự bạn đang cho phép là gì? Nó có phù hợp với một bộ ký tự hiện có không? Nếu vậy, bạn có thể chỉ 'biểu tượng' chuỗi thành mã hóa đích, loại bỏ tất cả các ký tự không hợp lệ. – deceze

Trả lời

30

Chỉ cần làm

preg_match('/[^\\p{Common}\\p{Latin}]/u', $string) 

nơi $string là một chuỗi UTF-8. Điều này sẽ trả về "1" nếu có các ký tự không phải là chữ Latinh và sẽ trả về "0" nếu không.

Ví dụ:

var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷaás??')); //int(0) 
var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷݤaás??')); //int(1) 
+0

Có vẻ hữu ích! +1 – alex

+0

Hoạt động tuyệt vời, cảm ơn v. Nhiều! – HoboBen

+0

Có danh sách các mẫu con được đặt tên ở bất kỳ đâu không? – HoboBen

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