PHPのsubstr文字化け問題を解決する方法
php substr は、php 言語に基づいて開発された、文字列の一部を返す関数です。 php substrを使用すると文字化けが発生することがありますが、どうすれば解決できますか?
string substr ( string $string , int $start [, int $length ] )
string の開始位置から始まる長さの文字列を返します
substr 関数は、GB2312 でエンコードされた場合は 2 バイト、utf-8 でエンコードされた場合は 3 バイトで文字をインターセプトします。指定された長さの文字列をインターセプトするときに切り捨てられると、返された結果が表示されるときに文字化けします。
確認後、解決策は 2 つのカテゴリにまとめることができます:
1. 代わりに mb_substr() 関数を使用します
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
substr() 関数と似ていますが、カウントは文字数に基づいて行われます。文字安全性
mb_substr を使用する () 関数は文字化けがないことを保証できますが、長さの統計がバイト数ではなく文字数の統計になるという欠点があります。表示に使用した場合、同じ長さの中国語の結果と英語の結果では、表示長に大きな差が生じます。
2. substr 関数を強化するための自作関数
これは、substr が漢字に遭遇する問題をより良く解決できる関数です。中国語の文字は 2 つの長さ単位で計算されるため、中国語と英語が混在する環境での文字列インターセプト結果の最終的な表示長は、表示上で文字化けが発生しないように破棄されます。中国語の文字に一般的に使用される UTF と互換性があります。-8 エンコードと GB2312 エンコードは優れた汎用性を持っています。
ソースコードを見る
function getstr($string, $length, $encoding = 'utf-8') { $string = trim($string); if($length && strlen($string) > $length) { //截断字符 $wordscut = ''; if(strtolower($encoding) == 'utf-8') { //utf8编码 $n = 0; $tn = 0; $noc = 0; while ($n < strlen($string)) { $t = ord($string[$n]); if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) { $tn = 1; $n++; $noc++; } elseif(194 <= $t && $t <= 223) { $tn = 2; $n += 2; } elseif(224 <= $t && $t < 239) { $tn = 3; $n += 3; $noc += 2; } elseif(240 <= $t && $t <= 247) { $tn = 4; $n += 4; $noc += 2; } elseif(248 <= $t && $t <= 251) { $tn = 5; $n += 5; $noc += 2; } elseif($t == 252 || $t == 253) { $tn = 6; $n += 6; $noc += 2; } else { $n++; } if ($noc >= $length) { break; } } if ($noc > $length) { $n -= $tn; } $wordscut = substr($string, 0, $n); } else { for($i = 0; $i < $length - 1; $i++) { if(ord($string[$i]) > 127) { $wordscut .= $string[$i].$string[$i + 1]; $i++; } else { $wordscut .= $string[$i]; } } } $string = $wordscut; } return trim($string); } // 示例 echo getstr("0一二三四五六七",1).'<br />'; // 0 echo getstr("0一二三四五六七",2).'<br />'; // 0 echo getstr("0一二三四五六七",3).'<br />'; // 0一 echo getstr("0一二三四五六七",4).'<br />'; // 0一 echo getstr("0一二三四五六七",5).'<br />'; // 0一二 echo getstr("0一a二b三四五六七",1).'<br />'; // 0 echo getstr("0一a二b三四五六七",2).'<br />'; // 0 echo getstr("0一a二b三四五六七",3).'<br />'; // 0一 echo getstr("0一a二b三四五六七",4).'<br />'; // 0一a echo getstr("0一a二b三四五六七",5).'<br />'; // 0一a
この関数は、UCHome 1.5 の getstr() 関数から変更されています。
上記は、php substr の文字化け問題を解決する方法に関する解決策です。php substr 関数に関する一連の記事も共有しています。必要な場合は、PHP の中国語 Web サイトを参照してください。
関連する推奨事項:
php substr() 関数の文字列インターセプトの使用例の説明
以上がPHPのsubstr文字化け問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。
