3

Laotianテキストを解析しようとしていますがutf8_ireplace、取得しています

未定義のオフセット通知。

私が見ることができる唯一のことは、分音記号があることです。それはその警告を引き起こしますか?それとも、なぜそれが常にラオス語になるのか(私が処理している6つの言語のうち)の手がかりを誰かが教えてくれますか?

ラオス語と同様の言語 (チベット語など) を異なる方法で処理する特別な方法はありutf8_replaceますか? これらの言語の一部の文字で通知が発生することは既知の問題ですか? 分音記号は問題ですか、それとも何か他のものですか? 通知レポートをオフにする以外に、通知を受け取らないようにする方法を知っている人はいますか?

更新:実際には、ラオス語では単語間にスペースがないため、文字列を区切る必要があることを付け加えます。これは、私が utf8_replace を使用しているものですが、タイ語では機能しているように見えますが、ラオス語では失敗しています。したがって、実際には文字列を分割しようとしていますが、何らかの理由でオフセットが定義されていません。チベット語も「α╜ª」などの問題を抱えているようです。

アップデート

中心的な質問は次のとおりutf8_replaceです。ラオス語のいくつかの単語を使用して通知を受け取るのはなぜですか?

(ジュムラ)

// 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);
4

1 に答える 1

0

オフセット エラーは、で使用されている正規表現を参照している可能性があると思いますpreg_matchregex101.comを使用して「lo」の正規表現をテストしたところ、次のエラーが返されました。

\x{30EFF}文字オフセットが大きすぎます。16 進数 4 文字に減らすか、UTF-16 (u 修飾子) を有効にします。

他の正規表現は問題なくテストされました。

于 2014-09-22T11:43:46.600 に答える