質問

私は、UTF-8である場合とそうでない場合がある別の文字列(ヘイスタック)内の2文字のユニコード文字列(針)の簡単な検索に問題があります

問題の一部は、で使用するためのコードを指定する方法がわからないことです strpos, 、そして、PHPをコードの特別なサポートでコンパイルする必要があるかどうか、または使用する必要があるかどうかはわかりません mb_strpos それも利用できないかもしれないので、私は避けようとしています。

すなわち。たとえば、針はです U+56DE U+590D (スペースなし)

preg_matchでそれはそうかもしれません preg_match("@\x{56DE}\x{590D}@",$haystack)しかし、それは実際に必要です @u 利用できない可能性があり、私は取得します Compilation failed: character value in \x{...} sequence is too large とりあえず。

とにかくpreg_matchを使用したくありません。それはstrposよりも大幅に遅くなる可能性があるためです(検索する必要がある他のシーケンスがあります)。

変換できますか U+56DE U+590D 単一のバイトシーケンス(おそらく5〜6文字)に入り、STRPOSで検索しますか? もしそうなら、それをバイトに変換する方法を理解できません。

とにかくPHPでユニコードインラインをどのように指定しますか?私はPRCE以外のことですか?

$blah="\u56DE\u590D"; うまくいきませんか?

アイデアをありがとう!

役に立ちましたか?

解決

まず、あなたの質問の構造は不十分です。いくつかの点でいくつかの質問があります。より明確な構造を使用した場合、おそらくより多くの回答を得るでしょう:1)達成しようとしているタスク、2)制限/要件、3)検討した戦略、4)そのような戦略で見つけた困難/より良いものはありますか。

そうは言っても、私は最後まで始めます:

$blah="\u56DE\u590D"; うまくいきませんか?

いいえ。言語はUnicodeについて何も知りません。 PHPでは、文字列はバイト配列です。したがって、PHPスクリプトでUnicodeコードポイントを表現する方法は、使用するエンコードに依存します。 UTF-8の場合、そうでしょう "\xE5\x9B\x9E\xE5\xA4\x8D", 、UTF-16のビッグエンディアンはそうでしょう "\x56\xDE\x59\x0D", 、 等々。

変換できますか U+56DE U+590D その単一のバイトシーケンス(おそらく5〜6文字)に入り、それを介してそれを検索します strpos?もしそうなら、それをバイトに変換する方法を理解できません。

なぜなら、最初の部分、はい、つまり、変換 U+56DE U+590D バイトには、説明が必要です。これらのUTF-16コードユニットまたはUnicodeコードポイントですか?たとえば、どうですか 𪛖 表現? U+D869 U+uDED6 また U+2A6D6?それらがUnicodeコード単位である場合、それらをUTF-16にエンコードするのは簡単です。 UTF-16 Big Endianの場合、それはただです "\x56\xDE\x59\x0D". 。それ以外の場合は、UTF-32をエンコードするのはまだ些細なことですが、UTF-16(またはUTF-8)で同じことをするにはもう少し作業が必要です。

2番目の部分については、読み続けてください。

問題の一部は、で使用するためのコードを指定する方法がわからないことです strpos, 、そして、PHPをコードの特別なサポートでコンパイルする必要があるかどうか、または使用する必要があるかどうかはわかりません mb_strpos それも利用できないかもしれないので、私は避けようとしています。

あなたは何をしようとしているのですか?なぜ文字列内の位置を見つける必要があるのですか? strpos 特定の文字列のバイトオフセットを提供します(再び、バイナリ形式で解釈されます)。文字列をクリップしようとしていますか? strpos (あるいは mb_strpos)ユニコードの平均問題 - グリフはいくつかのコード単位で構成される可能性があるため、グリフの一部をクリップするリスクがあります。あなたが何をしようとしているのかを言わない限り、私はあなたにこれ以上助言することはできません。

他のヒント

「利用できないかもしれない」と書いた。試してみることをお勧めします MB_STRPOS.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top