substr
マルチバイト文字列を破壊せずに使用する必要がありますが、PHP mb_ 拡張機能は利用できません。のドロップイン代替品はありmb_substr
ますか?
質問する
1455 次
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 に答える