php Smarty による文字化けした中国語の文字のインターセプトに問題がありますか?
一般的な Web サイトのページを表示するには、必然的に部分文字列のインターセプトが必要になりますが、これは英語のユーザーにのみ適しています。また、中国語と英語が混在するユーザーの場合は、truncate を使用すると文字化けが発生します。同じ数の文字列をインターセプトした場合、実際の表示長は異なりますが、視覚的には不均一に見え、画像は美しくなります。これは、漢字 1 文字の長さが英語 2 文字の長さにほぼ等しいためです。さらに、truncate は、GB2312、UTF-8、および他のエンコーディングと同時に互換性がありません。
改善された SmartTruncate: ファイル名: modifier.smartTruncate.php
コードをコピー コードは次のとおりです:
< ;? php
関数 SmartDetectUTF8($string)
{
static $result = array();
if(! array_key_exists($key = md5($string))
{
$utf8 = "
/^(?:
[x09x0Ax0Dx20-x7E] # ASCII
| [xC2-xDF][x80-xBF] # 過長でない 2 バイト
| xE0[xA0-xBF][x80-xBF] # オーバーロングを除く
| [xE1-xECxEExEF][x80-xBF]{2} # ストレート 3 バイト
| -xBF ] # サロゲートを除く xF0[x90-xBF][x80-xBF]{2} # プレーン 1-3
| [xF1-xF3][x80-xBF]{3} # プレーン 4- 15
|
}
return $result[$key];
関数 SmartStrlen($string)
{
$result = 0; 🎜>$number = SmartDetectUTF8($string) ? 3 : 2;
for($i = 0; $i < strlen($string); $i = $bytes)
{
$bytes = ord(substr( $string, $i, 1)) > $number : 1;
$bytes > 1.0 : 0.5;
}
関数 SmartSubstr($string, $start, $length = null)
{
$result = '';
$number = SmartDetectUTF8($string) ?
if( $start < 0)
{
$start = max(smartStrlen($string) $start, 0);
}
for($i = 0; $i
if($start <= 0)
{
break
}
$bytes = ord (substr($string , $i, 1)) > 127 ? $start -= $bytes > 1.0 : 0.5; length))
{
$result = substr($string, $i);
}
else
{
for($j = $i; $j < strlen ($string); $j = $bytes)
{
if($length <= 0)
{
break;
}
if(($bytes = ord) (substr($string , $j, 1)) > 127 ? $number : 1) > 1)
{
if($length < 1.0)
{
break; 🎜>}
$result .= substr($string, $j, $bytes);
$length -= 1.0;
}
else
{
$result .= substr($string, $j, 1);
$length -= 0.5;
}
}
return $result;
}
関数 Smarty_modifier_smartTruncate($文字列、$length = 80、$etc = '...'、
$break_words = false、$middle = false)
{
if ($length == 0)
return '' ;
if (smartStrlen($string) > $length) {
$length -= SmartStrlen($etc);
if (!$break_words && !$middle); preg_replace('/s ?(S )?$/', '',smartSubstr($string, 0, $length 1));
}
if(!$middle) {
return SmartSubstr( $string, 0, $length).$etc;
} else {
returnsmartSubstr($string, $length/2) .smartSubstr($string, -$length/2);
}
} else {
return $string;
}
}
?>
上記のコードは、truncate の元の機能を完全に実現します。 GB2312とUTF-8の両方のエンコーディングに対応しており、文字長を判定する際に、中国語文字は1.0、英語文字は0.5としてカウントされるため、部分文字列をインターセプトする際にムラが生じません。プラグイン 特別なことは何もありません。ここでは簡単なテストを示します:
{$content|smartTruncate:5:".."} ($content は "A China B China C People D People E Common F and G 国 H")
表示: A 中国語 B 中国語 C.. (中国語の記号の長さは 1.0 としてカウントされ、英語の記号の長さは 0.5 としてカウントされ、省略された記号の長さが考慮されます)
GB2312 エンコードを使用しているか、またはUTF-8 エンコーディングでは、結果が同じであることがわかります。これは、プラグイン名に「smart」という単語を追加した理由の 1 つです。

ホット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 でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

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

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

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
