ホームページ > バックエンド開発 > PHPチュートリアル > ポータブルUTF-8を使用してUnicodeをPHPに持ち込みます

ポータブルUTF-8を使用してUnicodeをPHPに持ち込みます

Christopher Nolan
リリース: 2025-02-23 09:29:09
オリジナル
696 人が閲覧しました

Bringing Unicode to PHP with Portable UTF-8

コアポイント

  • PHPはマルチバイト変数名とUnicode文字列を処理することができますが、文字列をシングルバイト文字シーケンスとして扱うため、言語には包括的なユニコードサポートがありません。この制限は、サブストリング抽出、弦の長さの決定、文字列セグメンテーションなど、文字列操作のすべての側面に影響します。
  • Portable UTF-8は、PHPアプリケーションにUnicodeサポートをもたらすユーザースペースライブラリです。 MbStringとICONVの上に構築され、約60のユニコードベースの文字列操作、テスト、検証機能を提供し、UTF-8をメインキャラクターエンコードスキームとして使用します。ライブラリは完全にポータブルであり、PHP 4.2以降のインストールで使用できます。
  • ポータブルUTF-8ライブラリは、UTF-8入力検証、無効なバイトの削除、XSS攻撃の防止、スペースのトリミング、重複スペースの削除、インクルージョンUTF-8文字の作成など、UTF-8入力検証、無効なバイトの削除、テキストのエンコードを処理するための複数の関数を提供します。入力文字長のURLフラグメントと強制制限。これにより、Unicode対応アプリケーションでは、フォーカスがバイトとバイトの長さから文字と文字の長さにシフトすることが保証されます。
PHPでは、マルチバイト変数名(例:

$a∩b$Ʃxy)、$Δx、およびその他の拡張機能がUnicode文字列を処理でき、mbstringおよびutf8_encode()関数をUTFで使用できます。 -8とISO-8859-1エンコーディングの間に文字列を変換します。ただし、PHPにはユニコードサポートがないと広く信じられています。この記事では、Unicodeサポートの欠如の意味について説明し、PHPアプリケーションにUnicodeサポートをもたらすライブラリを使用する方法を示しています - ポータブルUTF -8。 utf8_decode()

php のユニコードサポート

PHPのユニコード/マルチバイトサポートの欠如は、標準の文字列処理関数が文字列を単一バイト文字シーケンスとして扱うことを意味します。実際、公式のPHPマニュアルでは、PHPの文字列を「一連のキャラクターであり、そのうちの1つはバイトと同じ」と定義しています。 PHPは8ビット文字のみをサポートしますが、Unicode(および他の多くの文字セット)は、文字を表すために複数のバイトを必要とする場合があります。このPHPの制限は、弦の操作のほぼすべての側面に影響を与えます。この問題を解決するための努力は2005年初頭に始まりましたが、2010年には、さまざまな理由でネイティブユニコードサポートをPHPにもたらす作業が停止され、保留されました。 PHPでのネイティブユニコードサポートは実装に何年もかかる場合があるため(そうであれば)、開発者はこのギャップを埋めるためにmbstringiconvなどの利用可能な拡張機能に依存する必要がありますが、これらの拡張機能は限られたユニコードサポートのみを提供します。これらのライブラリはユニコード中心ではなく、非ユニコードエンコーディング間で変換することもできます。ユニコード文字列処理を簡素化することにプラスの貢献をします。ただし、上記の拡張機能にはいくつかの欠点もあります。限られたユニコード文字列処理機能のみを提供し、デフォルトではそれらのどれも有効になっていません。サーバー管理者は、PHPアプリケーションを介して拡張機能の一部またはすべてを明示的に有効にする必要があります。共有ホスティングプロバイダーは、多くの場合、1つまたは2つの拡張機能をインストールすることで事態を悪化させることがよくあります。これにより、開発者がユニコードのニーズを満たすために常に利用可能なAPIに依存することが困難になります。それでも、良いニュースは、PHPがUnicodeテキストを出力できることです。これは、PHPがASCIIでエンコードされた英語のテキストを送信しているのか、それとも文字が複数のバイトでエンコードされている言語に属する他のテキストを送信しているのかを本当に気にしないためです。これを知っていると、PHP開発者は、快適なユニコードベースの文字列操作を提供するAPIのみが必要です。

ポータブルUTF-8

最近のソリューションは、PHPで記述されたユーザースペースライブラリを作成することです。サーバー/言語レベルにサポートがない場合でも、これらのライブラリをアプリケーションに簡単にバンドルして、Unicodeサポートの存在を確保できます。多くのオープンソースアプリケーションには、この種の独自のライブラリが含まれており、さらに多くの人が無料のサードパーティライブラリを使用しています。 Portable UTF-8は、mbstringiconvの上に構築された無料の軽量ライブラリです。これら2つの拡張機能の機能を拡張し、約60のユニコードベースの文字列操作、テスト、検証関数を提供します。名前が示すように、Portable UTF-8はUTF-8を主要なキャラクターエンコーディングスキームとして使用します。ライブラリは、速度の理由で利用可能な拡張機能(mbstringおよびiconv)を使用し、それらを直接使用するときにいくつかの矛盾を橋渡ししますが、サーバーにこれらの拡張機能がない場合、純粋なPHP A UTF-8ルーチンを使用することに後退します。 Portable-UT8は完全にポータブルであり、PHP 4.2以降のインストールで使用できます。

ポータブルUTF-8を使用したスタンド処理

スタンド処理ユニコードのサポートが不十分なテキストエディターは、テキストを読むときにテキストを破損する可能性があり、テキストがコピーされ、そのようなエディターからWebフォームに貼り付けられ、アプリケーションの無効なUTF-8のソースである可能性があります。ユーザーがサビされた入力を処理するときは、入力がアプリケーションの期待に正確に一致していることを確認してください。テキストが有効なUTF-8であるかどうかを検出するには、ライブラリの

関数を使用できます。 is_utf8()

if (is_utf8($_POST['title'])) {
    // 执行某些操作...
}
ログイン後にコピー
無効なバイトから文字を回復することは不可能であるため、有効なUTF-8文字として認識されていないバイトを削除することが唯一の選択かもしれません。

関数を使用して、無効なバイトを削除できます。 utf8_clean()

$title = utf8_clean($_POST['title']);
ログイン後にコピー
各ユニコード文字は、対応するHTMLエンティティとしてエンコードできます。また、ブラウザに出力する前にXSS攻撃を防ぐために、この方法でテキストをエンコードすることをお勧めします。

echo utf8_html_encode($title);
ログイン後にコピー
通常、スペースは文字列の最初と端でトリミングされます。 Unicodeは約20個のスペース文字をリストしており、一部のASCIIベースのコントロール文字も剪定する必要があるオブジェクトと見なされる必要があります。

一方、そのようなスペースの複製は、文字列の中央に存在する可能性があり、削除する必要があります。以下は、組み合わせて
$title = utf8_trim($title);
ログイン後にコピー

の使用方法を示しています。 utf8_remove_duplicates() utf8_ws() SEO目的のためにURLフラグメントを作成するための従来のソリューションは、音訳を使用し、すべての非ASCII文字をフラグメントから削除します。これにより、URLの価値が低くなります。 URLはUTF-8エンコードされた文字をサポートできますが、このような削除や音訳なしでは、任意の言語に文字を含むリッチなスニペットを作成できます。

入力検証の開始からデータベースへのデータの保存まで、Unicode対応アプリケーションはバイトとバイトの長さではなく、文字と文字の長さに焦点を合わせます。この焦点の変化には、この違いを理解するための新しいインターフェイスが必要です。通常、入力文字の長さを制限する必要があるため、入力の長さが60文字以上の場合、サブストリングを作成します。
$title = utf8_remove_duplicates($title, utf8_ws());
ログイン後にコピー

または:
$slug = utf8_url_slug($title, 30); // 字符长度30
ログイン後にコピー

Portable-UT8ライブラリを使用して単一の文字にアクセスするには、3つの異なる方法があります。
if (utf8_strlen($title) > 60) {
    $title  = utf8_substr($title, 0, 60);
}
ログイン後にコピー
を使用して、単一の文字にアクセスできます。

if (!utf8_fits_inside($title , 60)) {
    $title  = utf8_substr($title, 0 ,60);
}
ログイン後にコピー

コールバック関数を使用して、単一の文字を反復的にアクセスできます。 utf8_access()

echo '第六个字符是:' . utf8_access($string, 5);
ログイン後にコピー
文字列を文字列を文字配列に分割し、

を使用して単一の文字として配列要素を処理できます。 utf8_chr_map()

utf8_chr_map('some_callback', $string);
ログイン後にコピー
トレーニングUnicodeでは、文字列内の最小/最大コードポイントを見つける必要があります。これらはすべて、Portable-UT8によってサポートされています。

utf8_split()

結論
array_map('some_callback', utf8_split($string));
ログイン後にコピー

PHP 6の開発が停止されたため、ネイティブユニコードサポートの長期的な必要性が遅れています。これは、多言語アプリケーションの開発に不可欠です。したがって、ポータブルUTF-8などのサーバー側の拡張機能とユーザースペースライブラリは、開発者がより良い標準化されたウェブを作成してローカルニーズを満たすのを支援する上で重要な役割を果たします。

(スペースの制限のため、FAQの部分はここで省略されています)

以上がポータブルUTF-8を使用してUnicodeをPHPに持ち込みますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート