2010-07-09 24 views
9

Tôi có một trang web nơi mọi người có thể gửi liên kết đến các trang web về ứng dụng iPhone. Anh chàng gửi tên ứng dụng, mô tả, thể loại và URL. Trang web này có nhiều năm và không bao giờ nhận được bất kỳ trình xây dựng mang tính xây dựng nào từ một nhà phát triển Nga, nhưng tiếc là nó được phát hiện bởi những kẻ gửi spam Nga làm tôi khó chịu. Ngay cả với tất cả các biện pháp chống thư rác, như hộp chú thích, vv, một số kẻ nhấn mạnh vào việc gửi các công cụ khiêu dâm Nga mà không có gì để làm với iPhone.Phát hiện các ký tự tiếng Nga trên biểu mẫu trong PHP

Tôi muốn cấm hoàn toàn bất kỳ URL hoặc bài đăng nào được thực hiện bằng các ký tự tiếng Nga. Đối với các URL tôi không có nhiều việc phải làm, ngoại trừ việc kiểm tra xem URL có chứa ".ru" hay không. Nhưng đối với mô tả, tôi muốn phát hiện các ký tự tiếng Nga. Làm thế nào để làm điều đó trong PHP?

cảm ơn.

+0

http://www.weberdev.com/Print-Code-Example.php?ExampleID=4650&mode=color – Sarfraz

Trả lời

38

Да очень просто Nó rất dễ dàng để làm với UTF-8 biểu thức thông thường (giả sử trang web của bạn sử dụng mã hóa UTF-8):

function isRussian($text) { 
    return preg_match('/[А-Яа-яЁё]/u', $text); 
} 
+0

Tôi đã thử nghiệm tất cả 3 phương pháp. Của bạn là một trong những công trình trong trường hợp của tôi. Và tôi thấy bằng tên của bạn, rằng bạn có lẽ từ đó! :-) Cảm ơn. – SpaceDog

+2

@Mike, gần như, tôi nói tiếng Nga nhưng không phải từ Nga :) –

+0

Cool ... Tôi yêu những nhân vật Nga ... nó là một ngôn ngữ mà dường như được viết trong gương ... :-) – SpaceDog

2

Tôi sẽ tải xuống bảng chữ cái tiếng Nga và sau đó kiểm tra chuỗi đầu vào với strstr(). Ví dụ:

$russianChars = array('з', 'я'.. etc); 

foreach($russianChars as $char) { 
    if(strstr($input, $char)) { 
     // russian char found in input, do something 
    } 
} 

Một thuật toán tốt có lẽ sẽ làm điều gì đó sau khi tìm thấy 3 chars Nga hoặc lâu hơn, để chắc chắn rằng ngôn ngữ là thực sự của Nga (từ chars Nga có thể xuất hiện trong các ngôn ngữ khác, tôi khuyên bạn nên làm một số nghiên cứu nếu đó là trường hợp).

0

bây giờ .. mã này là khoảng 5 tuổi, và 'làm việc cho tôi' trở lại khi tôi đã có một vấn đề tương tự

function detect_cyr_utf8($content) 
{ 
    return preg_match('/&#10[78]\d/', mb_encode_numericentity($content, array(0x0, 0x2FFFF, 0, 0xFFFF), 'UTF-8')); 
} 

do đó không đảm bảo, không có bất kỳ loại - nhưng nó có thể giúp bạn ra ngoài (về cơ bản nó mã hóa tất cả các tổ chức nước ngoài sau đó kiểm tra các ký tự Cyrillic chung)

Tốt nhất!

+0

thanksssssssssssssssssssss! – SpaceDog

3

Theo số PHP documentation, kể từ phiên bản 5.1.0, có thể tìm kiếm các tập lệnh cụ thể (viết) trong cụm từ thông dụng PCF utf-8 bằng cách sử dụng \ p {mã ngôn ngữ}. Đối với Rusian đó là

preg_match('/[\p{Cyrillic}]/u', $text); 

Có một cảnh báo trên trang:

Matching nhân vật do khách sạn tự Unicode không nhanh, bởi vì PCRE có để tìm kiếm một cấu trúc có chứa dữ liệu trong hơn mười lăm nghìn nhân vật.

0

NGUỒN: http://zurb.com/forrst/posts/Convert_cyrillic_to_latin_in_PHP-vWz

function ru2lat($str) { 
    $tr = array(
    "А"=>"a", "Б"=>"b", "В"=>"v", "Г"=>"g", "Д"=>"d", 
    "Е"=>"e", "Ё"=>"yo", "Ж"=>"zh", "З"=>"z", "И"=>"i", 
    "Й"=>"j", "К"=>"k", "Л"=>"l", "М"=>"m", "Н"=>"n", 
    "О"=>"o", "П"=>"p", "Р"=>"r", "С"=>"s", "Т"=>"t", 
    "У"=>"u", "Ф"=>"f", "Х"=>"kh", "Ц"=>"ts", "Ч"=>"ch", 
    "Ш"=>"sh", "Щ"=>"sch", "Ъ"=>"", "Ы"=>"y", "Ь"=>"", 
    "Э"=>"e", "Ю"=>"yu", "Я"=>"ya", "а"=>"a", "б"=>"b", 
    "в"=>"v", "г"=>"g", "д"=>"d", "е"=>"e", "ё"=>"yo", 
    "ж"=>"zh", "з"=>"z", "и"=>"i", "й"=>"j", "к"=>"k", 
    "л"=>"l", "м"=>"m", "н"=>"n", "о"=>"o", "п"=>"p", 
    "р"=>"r", "с"=>"s", "т"=>"t", "у"=>"u", "ф"=>"f", 
    "х"=>"kh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", "щ"=>"sch", 
    "ъ"=>"", "ы"=>"y", "ь"=>"", "э"=>"e", "ю"=>"yu", 
    "я"=>"ya", " "=>"-", "."=>"", ","=>"", "/"=>"-", 
    ":"=>"", ";"=>"","—"=>"", "–"=>"-" 
    ); 
    return strtr($str,$tr); 
} 

sau đó

echo ru2lat("текст по-русски"); --------------> "tekst po-russki" 
Các vấn đề liên quan