Функция str_word_count () не отображает арабский язык правильно

Я сделал следующую функцию для возврата определенного количества слов из текста:

function brief_text($text, $num_words = 50) { $words = str_word_count($text, 1); $required_words = array_slice($words, 0, $num_words); return implode(" ", $required_words); } 

и он отлично работает с английским языком, но когда я пытаюсь использовать его на арабском языке, он терпит неудачу и не возвращает слов, как ожидалось. Например:

 $text_en = "Cairo is the capital of Egypt and Paris is the capital of France"; echo brief_text($text_en, 10); 

выйдет Cairo is the capital of Egypt and Paris is the время

 $text_ar = "القاهرة هى عاصمة مصر وباريس هى عاصمة فرنسا"; echo brief_text($text_ar, 10); 

выведет .

Я знаю, что проблема str_word_count функцией str_word_count но я не знаю, как ее исправить.

ОБНОВИТЬ

Я уже написал еще одну функцию, которая хорошо работает с английским и арабским языками, но я искал решение проблемы, вызванное str_word_count() при использовании с арабским. Во всяком случае, вот моя другая функция:

  function brief_text($string, $number_of_required_words = 50) { $string = trim(preg_replace('/\s+/', ' ', $string)); $words = explode(" ", $string); $required_words = array_slice($words, 0, $number_of_required_words); // get sepecific number of elements from the array return implode(" ", $required_words); } 

Solutions Collecting From Web of "Функция str_word_count () не отображает арабский язык правильно"

Попробуйте использовать эту функцию для подсчета слов:

 // You can call the function as you like if (!function_exists('mb_str_word_count')) { function mb_str_word_count($string, $format = 0, $charlist = '[]') { mb_internal_encoding( 'UTF-8'); mb_regex_encoding( 'UTF-8'); $words = mb_split('[^\x{0600}-\x{06FF}]', $string); switch ($format) { case 0: return count($words); break; case 1: case 2: return $words; break; default: return $words; break; } }; } echo mb_str_word_count("القاهرة هى عاصمة مصر وباريس هى عاصمة فرنسا") . PHP_EOL; 

Ресурсы

  • Список Юникод для арабского
  • Алгоритм арабского строба на основе правил
  • Алгоритм управления строкой и шаблоном для арабского языка (кажется более полным)

Recommentations

  • Используйте тег <meta charset="UTF-8"/> в файлах HTML
  • Всегда добавлять Content-type: text/html; charset=utf-8 Content-type: text/html; charset=utf-8 при обслуживании страниц

Для приема символов ASCII:

 if (!function_exists('mb_str_word_count')) { function mb_str_word_count($string, $format = 0, $charlist = '[]') { $string=trim($string); if(empty($string)) $words = array(); else $words = preg_split('~[^\p{L}\p{N}\']+~u',$string); switch ($format) { case 0: return count($words); break; case 1: case 2: return $words; break; default: return $words; break; } } }