2010-07-09 21 views
9

Tengo un sitio donde las personas pueden enviar enlaces a sitios sobre aplicaciones de iPhone. El chico envía el nombre de la aplicación, descripción, categoría y URL. Este sitio tiene años y nunca recibió una presentación constructiva de un desarrollador ruso, pero desafortunadamente fue descubierto por los spammers rusos que me molesta muchísimo. Incluso con todas las medidas contra el spam, como recuadros de subtítulos, etc., algunos chicos insisten en enviar material ruso porno que no tiene nada que ver con el iPhone.Detectando caracteres rusos en un formulario en PHP

Quisiera prohibir completamente cualquier URL o publicación que se haga usando caracteres rusos. Para las URL no tengo mucho que hacer, excepto verificar si la URL contiene ".ru". Pero para las descripciones, me gustaría detectar los caracteres rusos. ¿Cómo hago eso en PHP?

gracias.

+0

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

Respuesta

38

Да очень просто Es fácil de hacer con UTF-8 expresiones regulares (asumiendo que su sitio utiliza codificación UTF-8):

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

Probé todo 3 métodos. El tuyo es el que funciona en mi caso. ¡Y veo por tu nombre que probablemente eres de allí! :-) Gracias. – SpaceDog

+2

@Mike, casi, soy de habla rusa, pero no de Rusia :) –

+0

Genial ... Me encantan los caracteres rusos ... es un lenguaje que parece estar escrito en un espejo ... :-) – SpaceDog

2

Me gustaría descargar el alfabeto ruso y luego verificar la cadena de entrada con strstr(). Por ejemplo:

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

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

Un buen algoritmo, probablemente hacer algo después de encontrar 3 caracteres rusos o menos, para asegurarse de que el lenguaje es en realidad rusa (ya caracteres rusos pueden aparecer en otros idiomas, sugiero hacer algunas investigaciones si ese es el caso).

0

ahora .. Este código es de unos 5 años de edad, y 'trabajado para mí atrás cuando tuve un problema similar

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

por lo tanto no garantiza, sin ninguna de la clase - pero puede ayudar a salir (básicamente que codifica todas las entidades extranjeras a continuación, los controles de caracteres cirílicos comunes)

¡Mejor!

+0

graciasssssssssssssssssss! – SpaceDog

3

De acuerdo con PHP documentation, desde la versión 5.1.0 ha sido posible buscar scripts específicos (escritura) en expresiones regulares PCRE utf-8 utilizando \ p {código de idioma}. Para Rusian es decir

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

hay una advertencia en la página:

Coincidencia de caracteres por la propiedad Unicode no es rápido, porque PCRE tiene para buscar una estructura que contiene los datos de más de quince mil caracteres.

0

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

entonces

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