2

substrマルチバイト文字列を破壊せずに使用する必要がありますが、PHP mb_ 拡張機能は利用できません。のドロップイン代替品はありmb_substrますか?

4

3 に答える 3

6

文字列が unicode の場合、空のパターンでpreg_splitを使用してトリックを実行できます。

簡単な実装は次のようになります。

function my_mb_substr($string, $offset, $length)
{
  $arr = preg_split("//u", $string);
  $slice = array_slice($arr, $offset + 1, $length);
  return implode("", $slice);
}

echo my_mb_substr("重庆大学", 1, 2); // 庆大
于 2012-11-26T11:13:43.373 に答える
3

Patchwork UTF-8は、多くのUnicode関数と関数のフォールバックを提供するライブラリであり、使用mb_できない場合は使用できます。これはドロップインの代替品であり、通常どおりincludeに使用できます。mb_substrただし、PHP5.3が必要です。

于 2012-11-26T11:12:08.157 に答える
1

私の知識に基づいた推測では、HTML エンティティがあるため、テキストは実際には次のようになります。

EDF, leader mondial de l'énergie nucléaire

... Web ブラウザでレンダリングすると、次のように表示されます。

EDF, leader mondial de l'énergie nucléaire

これは、マルチバイトの問題とは無関係です。根本的な問題は、HTML がリッチ テキスト形式であり、プレーン テキストのように不用意に操作できないことです。

作業できるデータのプレーンテキスト表現を取得する必要があります。strip_tags()を使用して HTML タグを削除できますが、切り詰めるに行う必要があります。その後、html_entity_decode()関数を使用して HTML エンティティを変換できます。

$text = "EDF, leader mondial de l'énergie nucléaire";
$output = html_entity_decode($text, ENT_COMPAT | ENT_HTML401, 'UTF-8');

...サイトがUTF-8を使用していると仮定します。

注: MB 拡張機能は同様の機能を提供します。

$text = "EDF, leader mondial de l'énergie nucléaire";
$output = mb_convert_encoding($text, 'UTF-8', 'HTML-ENTITIES');
于 2012-11-26T11:18:45.797 に答える