在PHP中检测表单上的俄语字符

时间:2010-07-09 11:49:07

标签: php

我有一个网站,人们可以提交有关iPhone应用程序的网站链接。该人提交了应用程序名称,描述,类别和URL。这个网站有多年没有收到俄罗斯开发商的任何建设性提交,但不幸的是,俄罗斯垃圾邮件发送者发现它让我感到厌恶。即使采取了所有针对垃圾邮件的措施,如标题框等,一些人仍坚持发送与iPhone无关的色情俄语内容。

我想完全禁止使用俄语字符完成的任何网址或帖子。 对于URL我没什么可做的,除了检查URL是否包含“.ru”。但是为了描述,我想检测俄罗斯人物。我如何在PHP中执行此操作?

感谢。

6 个答案:

答案 0 :(得分:51)

Даоченьпросто使用UTF-8正则表达式很容易(假设您的站点使用UTF-8编码):

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

答案 1 :(得分:8)

根据PHP documentation,从版本5.1.0开始,可以使用\ p {语言代码}在utf-8 PCRE正则表达式中查找特定(写入)脚本。对于Rusian来说

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

页面上有警告:

  

通过Unicode属性匹配字符并不快,因为PCRE具有   搜索包含超过一万五千个数据的结构   字符。

答案 2 :(得分:2)

我会下载俄语字母,然后用strstr()检查输入字符串。例如:

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

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

一个好的算法可能会在找到3个俄罗斯字符之后做一些事情,以确保该语言实际上是俄语(因为俄语字符可能出现在其他语言中,我建议做一些研究,如果是这样的话)。 / p>

答案 3 :(得分:1)

现在..这段代码大约5岁了,当我遇到类似的问题时,“为我工作”

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

因此没有保证,也没有任何保证 - 但它可以帮助你(基本上它编码所有外国实体然后检查常见的西里尔字符)

最佳!

答案 4 :(得分: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"

答案 5 :(得分:0)

如果您有一个描述输入,称为description:

   <input name="description"/>

在您的邮件文件中添加一个条件,例如phpmailer或其他类似的内容:

if (preg_match("/[А-Яа-яЁё]/u", $_POST['description'])) {
  echo "Sorry, no russian description allowed";
  die();
  }