Intereting Posts

PHP: Как определить, является ли входная строка арабской

Есть ли способ определить язык данных, вводимых через поле ввода?

hmm Я могу предложить улучшенную версию функции DimaKrasun:

functoin is_arabic($string) { if($string === 'arabic') { return true; } return false; } 

хорошо, шутки!

Предложение Пеккаса использовать google translate api является хорошим! но вы полагаетесь на внешнюю службу, которая всегда сложнее и т. д.

Я думаю, что Rushyos одобряет это хорошо! его просто не так просто. я написал для вас следующую функцию, но ее не тестировали, но она должна работать …

  <? 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); ?> 

окончательные мысли: как вы видите, я добавил, например, латинский счетчик, диапазон – это просто фиктивный номер b ut таким образом, что вы можете обнаружить кодировки (иврит, латинский, арабский, хинди, китайский и т. д.)

вы также можете сначала устранить некоторые символы … возможно, @, пробел, разрывы строк, слэши и т. д. … флаг PREG_SPLIT_NO_EMPTY для функции preg_split был бы полезен, но из-за ошибки я не использовал его здесь.

вы можете также иметь счетчик для всех наборов символов и посмотреть, какой из них, конечно, самый …

и, наконец, вы должны рассмотреть возможность измельчения строки после 200 символов или чего-то еще. этого должно быть достаточно, чтобы указать, какой набор символов используется.

и вы должны сделать некоторые ошибки обработки! как деление на ноль, пустую строку и т. д. и т.д.! не забывайте, что пожалуйста … любые вопросы? комментарий!

если вы хотите обнаружить ЯЗЫК строки, вы должны разделить на слова и проверить слова в некоторых заранее определенных таблицах. вам не нужен полный словарь, просто самые распространенные слова, и он должен работать нормально. токвизиция / нормализация тоже обязательна! для этого есть библиотеки, и это не то, о чем вы просили 🙂 просто хотел упомянуть об этом

это проверит, является ли строка арабской или имеет арабский текст

текст должен быть UNICODE, например UTF-8

 $str = "بسم الله"; if (preg_match('/[أ-ي]/ui', $str)) { echo "A match was found."; } else { echo "A match was not found."; } 

Вы можете использовать функцию, которую я написал для вас:

 <?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); } 

Но, пожалуйста, проверьте его перед использованием.

[РЕДАКТИРОВАТЬ 1]

Ваш вопрос: «Как определить, является ли входная строка арабским?» И я ответил на это, что не так?

[EDIT 2]

Прочтите это – Обнаружение языка из строки в PHP

[РЕДАКТИРОВАТЬ 3]

Извините, я переписываю функцию на это, попробуйте:

 function is_arabic($subject) { return (preg_match("/^[\x0600-\x06FF]/i", $subject) > 0); } 

Я не знаю о PHP-решении для этого, нет.

API Google Translate Ajax может быть для вас.

Проверьте этот фрагмент Javascript из документов API: Пример: обнаружение языка

Я предполагаю, что вы имеете в виду строку Unicode … в этом случае просто найдите наличие какого-либо символа с кодом между U + 0600-U + 06FF (1536-1791) в строке.

 public static function isArabic($string){ if(preg_match('/\p{Arabic}/u', $string)) return true; return false; } 

Библиотека PHP Text_LanguageDetect может обнаруживать 52 языка. Он тестируется и устанавливается через композитор и PEAR.

Эта функция проверяет, является ли введенная строка / предложение арабической или нет. Сначала я обрезал его, затем проверял слово за словом, вычисляя общее количество для обоих.

 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 ie Arabic return 1; } else{ // Return 0 means FALSE ie English return 0; } }