2010-07-09 65 views
9

我有一個網站,人們可以提交有關iPhone應用程序的網站鏈接。該人提交應用程序名稱,描述,類別和URL。這個網站有好幾年了,從來沒有收到任何來自俄羅斯開發者的建設性意見,但不幸的是,它被俄羅斯垃圾郵件發現者發現,讓我很不爽。即使採取了一切措施防範垃圾郵件,作爲字幕箱等,一些傢伙堅持發送與iPhone無關的色情俄文材料。檢測PHP中的表單上的俄語字符

我想完全禁止任何使用俄語字符完成的URL或帖子。 對於我沒有太多要做的URL,除了檢查URL是否包含「.ru」。但爲了描述,我想檢測俄羅斯人物。我如何在PHP中做到這一點?

謝謝。

+0

http://www.weberdev.com/Print-Code-Example.php?ExampleID=4650&mode=color – Sarfraz 2010-07-09 11:52:32

回答

38

Даоченьпросто這是很容易做到用UTF-8的正則表達式(假設你的網站使用UTF-8編碼):

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

我測試了所有3種方法。你的是我的例子。我從你的名字上看到,你可能是從那裏來的! :-) 謝謝。 – SpaceDog 2010-07-09 16:23:23

+2

@Mike,差不多,我是說俄語的,但不是來自俄羅斯:) – 2010-07-09 16:34:01

+0

酷......我喜歡那些俄羅斯人物......它是一種似乎寫在鏡子裏的語言...... :-) – SpaceDog 2010-07-09 16:35:27

2

我會下載俄文字母表,然後用strstr()檢查輸入字符串。例如:

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

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

一個好的算法可能會做一些調查3個俄文字符左右,可以肯定的是,語言實際上是俄羅斯(因爲俄語字符可以在其他語言出現之後,我建議做一些研究如果是這樣的話)。

0

現在..這個代碼是5歲左右,和「工作對我來說」回來時,我有一個類似的問題

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

因此沒有擔保,沒有任何形式的 - 但它可以幫助你(基本上它編碼所有外國實體然後檢查常見西里爾字符)

最好!

+0

thanksssssssssssssssssss! – SpaceDog 2010-07-09 12:35:39

3

根據PHP documentation,從版本5.1.0開始,可以使用\ p {語言代碼}在utf-8 PCRE正則表達式中查找特定的(書寫)腳本。對於Rusian是

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

還有就是頁面上的警告:

由統一物業配套字符並不快,因爲PCRE有 搜索包含數據的萬五千 結構字符。

0

來源: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); 
} 

然後

echo ru2lat("текст по-русски"); --------------> "tekst po-russki"