¿Hay una manera de detectar el idioma de los datos que están siendo introducidos a través del campo de entrada?PHP: ¿Cómo detectar si una cadena de entrada es el árabe
Respuesta
hmm i puede ofrecer una versión mejorada de la función de DimaKrasun:
functoin is_arabic($string) {
if($string === 'arabic') {
return true;
}
return false;
}
bien, lo suficientemente broma!
Pekkas sugerencia de utilizar la API de Google Translate es una buena! pero usted está confiando en un servicio externo que siempre es más complicado etc.
creo Rushyos approch es bueno! simplemente no es tan fácil. escribí la siguiente función para usted pero no probado, pero debería funcionar ...
<?
function uniord($u) {
// i just copied this function fron the php.net comments, but it should work fine!
$k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
$k1 = ord(substr($k, 0, 1));
$k2 = ord(substr($k, 1, 1));
return $k2 * 256 + $k1;
}
function is_arabic($str) {
if(mb_detect_encoding($str) !== 'UTF-8') {
$str = mb_convert_encoding($str,mb_detect_encoding($str),'UTF-8');
}
/*
$str = str_split($str); <- this function is not mb safe, it splits by bytes, not characters. we cannot use it
$str = preg_split('//u',$str); <- this function woulrd probably work fine but there was a bug reported in some php version so it pslits by bytes and not chars as well
*/
preg_match_all('/.|\n/u', $str, $matches);
$chars = $matches[0];
$arabic_count = 0;
$latin_count = 0;
$total_count = 0;
foreach($chars as $char) {
//$pos = ord($char); we cant use that, its not binary safe
$pos = uniord($char);
echo $char ." --> ".$pos.PHP_EOL;
if($pos >= 1536 && $pos <= 1791) {
$arabic_count++;
} else if($pos > 123 && $pos < 123) {
$latin_count++;
}
$total_count++;
}
if(($arabic_count/$total_count) > 0.6) {
// 60% arabic chars, its probably arabic
return true;
}
return false;
}
$arabic = is_arabic('عربية إخبارية تعمل على مدار اليوم. يمكنك مشاهدة بث القناة من خلال الموقع');
var_dump($arabic);
?>
reflexiones finales: como mejor le he añadido, por ejemplo, un contador de América, el rango es sólo un maniquí número b De esta manera podría detectar conjuntos de caracteres (hebreo, latino, árabe, hindi, chino, etc.)
es posible que también desee eliminar algunos caracteres primero ... tal vez @, espacio, saltos de línea, barras inclinadas, etc. .. la bandera PREG_SPLIT_NO_EMPTY para la función preg_split sería útil, sino por el error que no lo usamos aquí.
puede así tener un contador para todos los juegos de caracteres y ver que uno, por supuesto, el más ...
y, finalmente, usted debe considerar cortar la cadena después de 200 caracteres o algo así. esto debería ser suficiente para saber qué conjunto de caracteres se usa.
y tienes que hacer un poco de manejo de errores! como división por cero, cadena vacía, etc. no olvides que por favor ... alguna pregunta? ¡comentario!
si desea detectar el IDIOMA de una cadena, debe dividir en palabras y buscar las palabras en algunas tablas predefinidas. no necesita un diccionario completo, solo las palabras más comunes y debería funcionar bien. ¡la tokenización/normalización también es imprescindible! hay bibliotecas para que de todos modos y esto no es lo que usted pidió :) sólo quería mencionar que
Tu función hace que mi cabeza se vuelva borrosa. Trataré de implementarlo cuando esté de mejor humor, y le dejaré saber si funcionó. Pero por lo que leo, parece prometedor. – HyderA
roger eso, no te olvides de incluir la función uniord externa en la parte superior! déjame saber si necesitas cualquier medio –
El diccionario es una muy buena idea, el único problema es que fuera del alfabeto latino te encuentras rápidamente con circunstancias en las que el contexto externo cambia los caracteres, como los caracteres con múltiples glifos. Tendría que tener cuidado de evitar caracteres contextuales en su diccionario. – Rushyo
No estoy al tanto de una solución PHP para esto, no.
El Google Translate Ajax APIs puede ser para usted, sin embargo.
Control hacia fuera este fragmento de código JavaScript a partir de los documentos de la API: Example: Language Detection
Usted puede funcionar, lo que he escrito para que utilice:
<?php
/**
* Return`s true if string contains only arabic letters.
*
* @param string $string
* @return bool
*/
function is_arabic($string)
{
return (preg_match("/^\p{Arabic}/i", $string) > 0);
}
Pero, por favor, compruebe que, antes de su uso.
[EDIT 1]
Su pregunta: "¿Cómo puedo detectar si una cadena de entrada es el árabe" Y he respondido, ¿qué pasa?
[EDIT 2]
Lea esto - Detect language from string in PHP
[EDIT 3]
excusa, vuelvo a escribir la función de esto, probarlo:
function is_arabic($subject)
{
return (preg_match("/^[\x0600-\x06FF]/i", $subject) > 0);
}
"Is Arabic"! = "Contiene 'Arabic'" - el título de la pregunta puede ser un poco vago, pero el cuerpo de la pregunta es más que claro, ¿no? – Piskvor
Si la cuerda es árabe, ¿contiene letras árabes o no? –
Piskvor, RegEx de DimaKrasun debe de hecho detectar caracteres árabes ... no solo la cadena 'árabe'. – Rushyo
Supongo que te estás refiriendo a una cadena Unicode ... en cuyo caso, solo busca esencia de cualquier carácter con un código entre U + 0600-U + 06FF (1536-1791) en la cadena.
Inclusive, para mayor claridad. – Rushyo
Lo primero que pensé de regex con U + 0600-U + 06FF, pero luego utilicé \ p {Arabic} - en expresiones regulares, creo que \ p {Arabic} es lo mismo con U + 0600-U + 06FF, pero no lo he intentado –
Estoy bastante seguro de que es lo mismo, pero este método es mucho más rápido. – Rushyo
esta comprobará si la cadena es árabe o tiene texto árabe
texto debe ser UNICODE por ejemplo, UTF-8
$str = "بسم الله";
if (preg_match('/[أ-ي]/ui', $str)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
Funcionó perfectamente. Muchas gracias! – wpcoder
public static function isArabic($string){
if(preg_match('/\p{Arabic}/u', $string))
return true;
return false;
}
Esta función comprueba si la línea/frase introducida es árabe o no. Primero lo recorté y luego compruebo palabra por palabra, calculando el recuento total de ambos.
function isArabic($string){
// Initializing count variables with zero
$arabicCount = 0;
$englishCount = 0;
// Getting the cleanest String without any number or Brackets or Hyphen
$noNumbers = preg_replace('/[0-9]+/', '', $string);
$noBracketsHyphen = array('(', ')', '-');
$clean = trim(str_replace($noBracketsHyphen , '', $noNumbers));
// After Getting the clean string, splitting it by space to get the total entered words
$array = explode(" ", $clean); // $array contain the words that was entered by the user
for ($i=0; $i <= count($array) ; $i++) {
// Checking either word is Arabic or not
$checkLang = preg_match('/\p{Arabic}/u', $array[$i]);
if($checkLang == 1){
++$arabicCount;
} else{
++$englishCount;
}
}
if($arabicCount >= $englishCount){
// Return 1 means TRUE i-e Arabic
return 1;
} else{
// Return 0 means FALSE i-e English
return 0;
}
}
El PHP Text_LanguageDetect library es capaz de detectar 52 idiomas. Está probado en una unidad e instalable a través de compositor y PEAR.
- 1. Manejar cadena árabe en PHP con Eclipse
- 2. ¿Cómo puedo saber si una cadena dada es una entrada válida para preg_match de PHP?
- 3. cómo detectar si la variable es una cadena
- 4. Detectar si una propiedad de objeto es privada en PHP
- 5. Detectar lenguaje de entrada de cadena/usuario
- 6. ¿Cómo encontrar si una cadena tiene todas las letras en inglés o en árabe
- 7. Cómo detectar si el archivo es una imagen en perl
- 8. Cómo determinar si el valor es una fecha en PHP
- 9. PHP - Cómo detectar si el búfer de salida está activado
- 10. cómo detectar rápidamente si una cadena está comprimida zlib?
- 11. Cómo detectar si un usuario deja una página en PHP
- 12. ¿Cómo detectar si una cadena contiene al menos un número?
- 13. ¿Cómo detectar si una cadena contiene caracteres especiales?
- 14. ¿Cómo detectar una cadena UFF-8 mal formada en PHP?
- 15. Detectar si existe sesión de PHP
- 16. Detectar si el archivo es MP3
- 17. ¿Cómo saber si una cadena es xml?
- 18. PHP: simple, validar si la cadena es hexadecimal
- 19. ¿Cómo enviar datos del formulario serializar utilizando jQuery si el elemento de entrada es una matriz
- 20. ¿Detectar si la URL especificada es una imagen en Android?
- 21. Compruebe si la entrada es una lista/tupla de cadenas o una sola cadena
- 22. Cómo determinar si una cadena es un número en C#
- 23. Comprobación de PHP si el archivo contiene una cadena
- 24. ¿Cómo probar si una cadena contiene galimatías en PHP?
- 25. Detectar si una matriz es indexada o asociativa
- 26. Detectar si una cadena estaba codificada en UTF-8
- 27. Cómo detectar si NSString es nulo?
- 28. WPF MVVM: cómo detectar si una vista es "sucia"
- 29. ¿Cómo puedo detectar si una pantalla es sensible al tacto?
- 30. compruebe si una cadena es una URL
Supongo que usted quiso decir el script árabe, en lugar del árabe. Hay una gran distinción. – Rushyo
¿Qué sucede si la cadena contiene palabras de varios idiomas? ejemplo: 私 no عرب – Lukman