2

私の考えではまったく同じであるはずの2つのUnicode文字を比較することはできません。どういうわけかエンコードが違うのではないかと思いますが、同じエンコードに変更する方法がわかりません。

比較したい文字は、ミャンマーのUnicodeブロックのものです。私はphp5でwordpressを実行していて、ミャンマーのUnicodeを処理するカスタムプラグインを作成しようとしています。私のファイルはすべてUTF-8でエンコードされていますが、wordpressが何をするのかわかりません。

これが私がしていることです:

function myFunction( $inputText ) {
    $outputText = '';
    $inputTextArray = str_split($inputText);
    foreach($inputTextArray as $char) {
        if ($char == "က") // U+1000, a character from the Myanmar Unicode block 
            $outputText .= $char;
    }
    return $outputText;
}
add_filter( 'the_content', 'myFunction');

作業のこの段階では、関数はコンテンツに表示されている場所にのみကを返すことになっています。ただし、投稿コンテンツにကが明確に含まれている場合でも、空の文字列以外は返されません。文字をラテン文字に変更すると、関数は期待どおりに機能します。

したがって、私の質問は、これらの文字(またはのいずれ$char"က")をエンコードし$charて、この文字が含まれている場合にそれらが等しく比較されるようにするにはどうすればよいかということです。

4

1 に答える 1

2

str_splitユニコード対応ではありません。マルチバイト文字の場合、それらを 1 文字に分割します。マルチバイト文字列関数またはスイッチpreg_splitを使用してみてください/u

$inputTextArray = preg_split("//u", $inputText, -1, PREG_SPLIT_NO_EMPTY);

http://codepad.viper-7.com/ErFwcy

マルチバイト関数mb_substr_countを使用すると、コードを減らすこともできます。このような、

function myFunction( $inputText ) {
    return str_repeat("က", mb_substr_count($inputText, "က"));
}

または、正規表現を使用して、

preg_match_all("/က/u", $text, $match);
$output = implode("", $match[0]);
于 2013-01-18T05:45:38.510 に答える