2010-07-09 69 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"