0

文字「é」に問題があります。

ftp_nlist($this->ftpStream, $directory); 「Parté.mp4」のような文字列がありますが、「é」は正規表現と一致しません[\p{L}]*\.mp4

ここに例があります:

動かない「é」のASCIIコードは「101 204 129」です。$e が奇妙な文字である関数ord($e);は、単純な文字 e のコードである '101' を返します。


$e = substr($fileName,4,3);1文字を取得するために を作らなければならないので、私の 'é' は 3 文字で構成されているようです。

正規表現でこれらの文字を承認できるようにしたいと思います...リードがあれば、ありがとう。

4

2 に答える 2

1

「動作しない 'é' の ASCII コードは '101 204 129' です」と言うとき、おそらくバイトはその 10 進数の数字です。(これらは ASCII コードではありません。ASCII に従って解釈されるべきではありません。さらに、ASCII は 10 進数の 127 で終了します。) 16 進数では、これは 65 CC 81 を意味します。これは、基本ラテン文字の正しいUTF-8 表現です。 e” U+0065 に続いて U+0301 COMBINING ACUTE ACCENT. これは、「é」の正しい分解表現です。

したがって、最初に文字エンコードの問題を修正する必要があります。文字の UTF-8 バイトではなく、文字そのものを扱うべきです。データを読み取るためのルーチンを変更する必要がある場合や、データが変更されている場合はデータ自体を修正する必要がある場合があります。

UTF-8 データを正しく読み取った場合でも、アキュート アクセントの組み合わせは文字ではないため、マッチングの問題が残ります。データを正規化形式 C に変換する必要がある場合があります。これにより、2 文字の組み合わせが文字の「é」に変わります。

于 2014-11-19T16:51:40.543 に答える