2

私は PHP を で構成しているmbstring.func_overload = 7ので、すべてのシングルバイト文字列関数は対応するマルチバイト関数にマップされます。しかし、文字列をバイト配列として扱う必要がある場合もあります。たとえば、サイズを計算するときや暗号化を行うときなどです。

ここで最善のアプローチは何ですか?文字列が実際にエンコードされる方法ではない場合でも、マルチバイト関数を使用してシングルバイト エンコーディングを渡すことはできますか? 例えば:

mb_substr($utf8str, 0, 1, "latin1");
mb_strlen($utf8str, "latin1");

編集: PHP のソースを調べたときに、元の関数の名前が mb_orig_strlen のように mb_orig_X に変更されていることに気付きました。文書化されていないため、おそらく安全ではありませんが、興味深いものです。

4

1 に答える 1

1

元の関数を使用する必要がある場合 (つまり、バイナリ文字列を操作する必要がある場合) は、これらの関数をオーバーライドするべきではないと思いますが、これは非常に汚い解決策です。これにより、以前に行った選択に対して、さらに汚い回避策を講じることを余儀なくされます。そして、それはあなたが知らないうちにあなたが使っているライブラリを破壊する可能性があります (しかし、PHP チームはそのようなばかげた機能をますます発明し続けています)。

しかし、それを維持する必要がある場合は、次のことを行う必要があります。

  1. のような言語に中立なエンコーディングをASCII使用します(インタープリター用ではなく、コードを読む人用です-それが2年後のあなたであっても)。
  2. そのコードを調べているすべての人にとって非常に混乱するため、なぜそれを行ったのかを徹底的に文書化してください。
于 2009-11-08T17:38:59.320 に答える