我有一个网站,人们可以提交有关iPhone应用程序的网站链接。该人提交了应用程序名称,描述,类别和URL。这个网站有多年没有收到俄罗斯开发商的任何建设性提交,但不幸的是,俄罗斯垃圾邮件发送者发现它让我感到厌恶。即使采取了所有针对垃圾邮件的措施,如标题框等,一些人仍坚持发送与iPhone无关的色情俄语内容。
我想完全禁止使用俄语字符完成的任何网址或帖子。 对于URL我没什么可做的,除了检查URL是否包含“.ru”。但是为了描述,我想检测俄罗斯人物。我如何在PHP中执行此操作?
感谢。
答案 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('/
[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();
}