2013-03-31 2 views
3

Я пытаюсь разобрать Laotian текст с utf8_ireplace и я получаюНеопределенные зачеты и диакритические знаки

undefined offset notice.

Единственное, что я могу видеть, что есть диакритические знаки. Означает ли это предупреждение? Или может кто-нибудь дать мне понять, почему он всегда будет лаосским (из 6 языков, которые я обрабатываю)?

Есть ли способ, которым лаосский и подобные языки (например, тибетский) следует обрабатывать по-разному в отношении utf8_replace? Известно ли, что он вызывает уведомления с некоторыми символами на этих языках? Есть диакритические вопросы или что-то еще? Кто-нибудь знает, как не получать уведомления, кроме отключения уведомления?

Обновление: На самом деле я добавляю, что в лаосских словах нет пробелов между словами, поэтому вам нужно отделить строки символов, и для этого я использую utf8_replace, но он не подходит для лаосского языка, хотя он, похоже, работает на тайский например. Поэтому я действительно пытаюсь разбить строки символов, но по какой-то причине смещения не определены. Кажется, что тибетцы также имеют проблемы, например. «Α╜ª»

Update

Вот главный вопрос: Почему я получаю уведомления с помощью utf8_replace на некоторых слов в лаосской?

(Joomla)

// Iterate through the terms and test if they contain the relevant characters. 
for ($i = 0, $n = count($terms); $i < $n; $i++) 
{ 
    $charMatches = array(); 
    if ($lang === 'zh') 
    { 
     $charCount = preg_match_all('#[\x{4E00}-\x{9FCF}]#mui', $terms[$i], $charMatches); 
    } 

    elseif ($lang === 'ja') 
    { 
     // Kanji (Han), Katakana and Hiragana are each checked 
     $charCount = preg_match_all('#[\x{4E00}-\x{9FCF}]#mui', $terms[$i], $charMatches); 
     $charCount += preg_match_all('#[\x{3040–\x{309F}]#mui', $terms[$i], $charMatches); 
     $charCount += preg_match_all('#[\x{30A0}-\x{30FF}]#mui', $terms[$i], $charMatches); 
    } 
    elseif ($lang === 'th') 
    { 
     $charCount = preg_match_all('#[\x{0E00}-\x{0E7F}]#mui', $terms[$i], $charMatches); 
    } 
    elseif ($lang === 'km') 
    { 
     $charCount = preg_match_all('#[\x{1780}-\x{17FF}]#mui', $terms[$i], $charMatches); 
    } 
    elseif ($lang === 'lo') 
    { 
     $charCount = preg_match_all('#[\x{0E80}-\x{30EFF}]#mui', $terms[$i], $charMatches); 
    } 
    elseif ($lang === 'my') 
    { 
     $charCount = preg_match_all('#[\x{1000}-\x{109F}]#mui', $terms[$i], $charMatches); 
    } 
    elseif ($lang === 'bo') 
    { 
     $charCount = preg_match_all('#[\x{0F00}-\x{0FFF}]#mui', $terms[$i], $charMatches); 
    } 
    // Split apart any groups of characters. 
    for ($j = 0; $j < $charCount; $j++) 
    { 
     if (isset($charMatches[0][$j])) 
     { 
      $tSplit = JString::str_ireplace($charMatches[0][$j], '', $terms[$i], null); 

      if (!empty($tSplit)) 
      { 
       $terms[$i] = $tSplit; 
      } 
      else 
      { 
       unset($terms[$i]); 
      } 

      $terms[] = $charMatches[0][$j]; 
     } 
    } 
} 

// Reset array keys. 
$terms = array_values($terms); 
+0

, пожалуйста, разместите соответствующий код – 2013-03-31 01:22:01

+0

У меня на самом деле нет данных о моем или бо (Мьянма или тибетский), но у меня есть тайский, японский, китайский традиционный и лаосский. – Elin

+1

Я не понимаю, почему это не вопрос. Я хочу знать, есть ли проблема с диакритикой или что-то еще с обработкой лаосского языка. Я не знаю, как это не вопрос. Я попытаюсь перефразировать – Elin

ответ

0

Я думаю, что ошибка смещения может относиться к регулярному выражению, используемому в preg_match. Я проверил регулярное выражение для «вот», используя regex101.com и возвращает эту ошибку:

\x{30EFF} Character offset is too large. Reduce it to 4 hexadecimal characters or enable UTF-16 (u-modifier)

Другие регулярные выражения проходят нормально.

Смежные вопросы