2010-07-09 10 views
9

Mam stronę, na której ludzie mogą przesyłać linki do stron o aplikacjach na iPhone'a. Facet przesyła nazwę aplikacji, opis, kategorię i adres URL. Ta strona ma lata i nigdy nie otrzymała konstruktywnego zgłoszenia od rosyjskiego programisty, ale niestety została odkryta przez rosyjskich spamerów, którzy denerwują mnie. Nawet przy wszystkich środkach przeciwko spamowi, w skrzynkach z napisami itp., Niektórzy faceci upierają się przy wysyłaniu pornografii rosyjskiej, która nie ma nic wspólnego z iPhone'em.Wykrywanie rosyjskich znaków na formularzu w PHP

Chciałbym całkowicie zabronić jakiegokolwiek adresu URL lub postu, który jest wykonywany przy użyciu znaków rosyjskich. Dla adresów URL nie mam wiele do zrobienia, z wyjątkiem sprawdzania, czy URL zawiera ".ru". Ale dla opisów chciałbym wykryć rosyjskie postacie. Jak to zrobić w PHP?

dzięki.

+0

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

Odpowiedz

38

Да очень просто Łatwo jest zrobić z 8 UTF-wyrażeń regularnych (zakładając, że witryna korzysta z kodowania UTF-8):

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

że wszystkie testowane 3 metody. Twój jest tym, który działa w moim przypadku. I widzę po imieniu, że prawdopodobnie jesteście z tego miejsca! :-) Dzięki. – SpaceDog

+2

@Mike, prawie, jestem rosyjskojęzyczny, ale nie z Rosji :) –

+0

Fajnie ... Uwielbiam te rosyjskie postacie ... to język, który wydaje się być napisany w lustrze ... :-) – SpaceDog

2

Chciałbym pobrać rosyjski alfabet, a następnie sprawdzić ciąg wejściowy z strstr(). Na przykład:

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

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

Dobry algorytm prawdopodobnie coś zrobić po znalezieniu 3 rosyjskich znaków lub tak, aby mieć pewność, że język jest rzeczywiście rosyjski (od rosyjskie znaki mogą pojawiać się w innych językach, proponuję robi rozeznanie Jeśli o to chodzi).

0

teraz .. kod ten wynosi około 5 lat, i „pracował dla mnie” z powrotem, gdy miałem podobny problem

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

zatem żadnych gwarancji, nie każdy w tym rodzaju - ale może ci pomóc (w zasadzie to koduje wszystkie podmioty zagraniczne następnie sprawdza wspólnych cyrylicy znaków)

Najlepsza!

+0

thanksssssssssssssssssss! – SpaceDog

3

Zgodnie z PHP documentation, od wersji 5.1.0 możliwe było wyszukiwanie określonych (zapisujących) skryptów w wyrażeniach regularnych UTF-8 PCRE za pomocą \ p {kod języka}. Dla Rusian czyli

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

Jest to ostrzeżenie na stronie:

Dopasowanie znaków posesją Unicode nie jest szybki, ponieważ PCRE posiada szukać strukturę, która zawiera dane o ponad piętnaście tysięcy postacie.

0

ŹRÓDŁO: 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); 
} 

następnie

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