ThinkPHP Smarty テンプレートで中国語と英語が混在する文字化けを傍受するためのソリューション
ThinkPHP Smarty テンプレートで中国語と英語が混在する文字化けをインターセプトするための解決策
ここ数日ブログを書いていませんでしたが、実は忙しくてまとめなければならないことがたくさんあります。最近プロジェクトに取り組んでいますが、数日間混乱していた Smarty テンプレートで中国語と英語が混在する文字化け文字列をインターセプトする問題がついに解決されたので、必要な友人のために記録しておきます。
が表示される 文字化けの理由:
文字列インターセプトの場合、truncate 関数は英語ユーザーにのみ適しています. 中国語ユーザーの場合、truncate を使用すると文字化けが発生し、中国語と英語が混在する場合は、同じ数の文字列が切り取られると、実際の表示長は異なります。英字2文字の長さ。さらに、truncate は、GB2312、UTF-8、および他のエンコーディングと同時に互換性がありません。
解決策: 拡張クラスを自分で作成し、
ThinkPHP は Smarty の truncate 変数レギュレーターを使用します クラス ファイルの場所: ThinkPHPLibraryVendorSmartypluginsそのうちの 1 つは modifier.truncate.php です。これは使用しません。
ファイル名: modifier.smartTruncate.php を実装するために自分で作成します。
<?<span style="color: #000000;">php</span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 中英文多编码字符串截取</span><span style="color: #008000;">*/</span><span style="color: #0000ff;">function</span> smartDetectUTF8(<span style="color: #800080;">$string</span><span style="color: #000000;">){ </span><span style="color: #0000ff;">static</span> <span style="color: #800080;">$result</span> = <span style="color: #0000ff;">array</span><span style="color: #000000;">(); </span><span style="color: #0000ff;">if</span>(! <span style="color: #008080;">array_key_exists</span>(<span style="color: #800080;">$key</span> = <span style="color: #008080;">md5</span>(<span style="color: #800080;">$string</span>), <span style="color: #800080;">$result</span><span style="color: #000000;">)) { </span><span style="color: #800080;">$utf8</span> = "<span style="color: #000000;"> /^(?: [\x09\x0A\x0D\x20-\x7E] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 )+$/xs </span>"<span style="color: #000000;">; </span><span style="color: #800080;">$result</span>[<span style="color: #800080;">$key</span>] = <span style="color: #008080;">preg_match</span>(<span style="color: #008080;">trim</span>(<span style="color: #800080;">$utf8</span>), <span style="color: #800080;">$string</span><span style="color: #000000;">); } </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$result</span>[<span style="color: #800080;">$key</span><span style="color: #000000;">];}</span><span style="color: #0000ff;">function</span> smartStrlen(<span style="color: #800080;">$string</span><span style="color: #000000;">){ </span><span style="color: #800080;">$result</span> = 0<span style="color: #000000;">; </span><span style="color: #800080;">$number</span> = smartDetectUTF8(<span style="color: #800080;">$string</span>) ? 3 : 2<span style="color: #000000;">; </span><span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span> = 0; <span style="color: #800080;">$i</span> < <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$string</span>); <span style="color: #800080;">$i</span> += <span style="color: #800080;">$bytes</span><span style="color: #000000;">) { </span><span style="color: #800080;">$bytes</span> = <span style="color: #008080;">ord</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$i</span>, 1)) > 127 ? <span style="color: #800080;">$number</span> : 1<span style="color: #000000;">; </span><span style="color: #800080;">$result</span> += <span style="color: #800080;">$bytes</span> > 1 ? 1.0 : 0.5<span style="color: #000000;">; } </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$result</span><span style="color: #000000;">;}</span><span style="color: #0000ff;">function</span> smartSubstr(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$start</span>, <span style="color: #800080;">$length</span> = <span style="color: #0000ff;">null</span><span style="color: #000000;">){ </span><span style="color: #800080;">$result</span> = ''<span style="color: #000000;">; </span><span style="color: #800080;">$number</span> = smartDetectUTF8(<span style="color: #800080;">$string</span>) ? 3 : 2<span style="color: #000000;">; </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$start</span> < 0<span style="color: #000000;">) { </span><span style="color: #800080;">$start</span> = <span style="color: #008080;">max</span>(smartStrlen(<span style="color: #800080;">$string</span>) + <span style="color: #800080;">$start</span>, 0<span style="color: #000000;">); } </span><span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span> = 0; <span style="color: #800080;">$i</span> < <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$string</span>); <span style="color: #800080;">$i</span> += <span style="color: #800080;">$bytes</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$start</span> <= 0<span style="color: #000000;">) { </span><span style="color: #0000ff;">break</span><span style="color: #000000;">; } </span><span style="color: #800080;">$bytes</span> = <span style="color: #008080;">ord</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$i</span>, 1)) > 127 ? <span style="color: #800080;">$number</span> : 1<span style="color: #000000;">; </span><span style="color: #800080;">$start</span> -= <span style="color: #800080;">$bytes</span> > 1 ? 1.0 : 0.5<span style="color: #000000;">; } </span><span style="color: #0000ff;">if</span>(<span style="color: #008080;">is_null</span>(<span style="color: #800080;">$length</span><span style="color: #000000;">)) { </span><span style="color: #800080;">$result</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$i</span><span style="color: #000000;">); } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #0000ff;">for</span>(<span style="color: #800080;">$j</span> = <span style="color: #800080;">$i</span>; <span style="color: #800080;">$j</span> < <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$string</span>); <span style="color: #800080;">$j</span> += <span style="color: #800080;">$bytes</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$length</span> <= 0<span style="color: #000000;">) { </span><span style="color: #0000ff;">break</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">if</span>((<span style="color: #800080;">$bytes</span> = <span style="color: #008080;">ord</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$j</span>, 1)) > 127 ? <span style="color: #800080;">$number</span> : 1) > 1<span style="color: #000000;">) { </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$length</span> < 1.0<span style="color: #000000;">) { </span><span style="color: #0000ff;">break</span><span style="color: #000000;">; } </span><span style="color: #800080;">$result</span> .= <span style="color: #008080;">substr</span>(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$j</span>, <span style="color: #800080;">$bytes</span><span style="color: #000000;">); </span><span style="color: #800080;">$length</span> -= 1.0<span style="color: #000000;">; } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #800080;">$result</span> .= <span style="color: #008080;">substr</span>(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$j</span>, 1<span style="color: #000000;">); </span><span style="color: #800080;">$length</span> -= 0.5<span style="color: #000000;">; } } } </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$result</span><span style="color: #000000;">;}</span><span style="color: #0000ff;">function</span> smarty_modifier_smartTruncate(<span style="color: #800080;">$string</span>, <span style="color: #800080;">$length</span> = 80, <span style="color: #800080;">$etc</span> = '...',<span style="color: #800080;">$break_words</span> = <span style="color: #0000ff;">false</span>, <span style="color: #800080;">$middle</span> = <span style="color: #0000ff;">false</span><span style="color: #000000;">){ </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$length</span> == 0<span style="color: #000000;">) </span><span style="color: #0000ff;">return</span> ''<span style="color: #000000;">; </span><span style="color: #0000ff;">if</span> (smartStrlen(<span style="color: #800080;">$string</span>) > <span style="color: #800080;">$length</span><span style="color: #000000;">) { </span><span style="color: #800080;">$length</span> -= smartStrlen(<span style="color: #800080;">$etc</span><span style="color: #000000;">); </span><span style="color: #0000ff;">if</span> (!<span style="color: #800080;">$break_words</span> && !<span style="color: #800080;">$middle</span><span style="color: #000000;">) { </span><span style="color: #800080;">$string</span> = <span style="color: #008080;">preg_replace</span>('/\s+?(\S+)?$/', '', smartSubstr(<span style="color: #800080;">$string</span>, 0, <span style="color: #800080;">$length</span>+1<span style="color: #000000;">)); } </span><span style="color: #0000ff;">if</span>(!<span style="color: #800080;">$middle</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">return</span> smartSubstr(<span style="color: #800080;">$string</span>, 0, <span style="color: #800080;">$length</span>).<span style="color: #800080;">$etc</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #0000ff;">return</span> smartSubstr(<span style="color: #800080;">$string</span>, 0, <span style="color: #800080;">$length</span>/2) . <span style="color: #800080;">$etc</span> . smartSubstr(<span style="color: #800080;">$string</span>, -<span style="color: #800080;">$length</span>/2<span style="color: #000000;">); } } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$string</span><span style="color: #000000;">; }}</span>?>
注: 文字長を判断する場合、漢字は
使用法:
{<span style="color: #800080;">$content</span>|smartTruncate:5:"..."}
わかりました、テストに問題はありません。質問がある場合は、ご指摘ください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Java 開発で基本データ型を文字列に変換する必要がある場合、一般的な方法は String クラスの valueOf() 関数を使用することです。この関数は、基本データ型のパラメータを受け入れ、対応する文字列表現を返すことができます。この記事では、基本的なデータ型変換に String.valueOf() 関数を使用する方法を検討し、いくつかのコード例を提供します。

char配列をstringに変換する方法:代入によって実現できます {char a[]=" abc d\0efg ";string s=a;} 構文を使用して、char配列にstringに値を直接代入させて実行します変換を完了するためのコード。

C 言語における return の使い方は、 1. 戻り値の型が void の関数については、return 文を使用して関数の実行を早期に終了することができます; 2. 戻り値の型が void ではない関数については、 return ステートメントは、関数の実行を終了するためのものです。結果は呼び出し元に返されます。 3. 関数の実行を早期に終了します。関数内で return ステートメントを使用して、関数の実行を早期に終了することもできます。関数が値を返さない場合。

Java の String.replace() 関数を使用して文字列内の文字 (文字列) を置換する Java では、文字列は不変オブジェクトです。つまり、文字列オブジェクトが作成されると、その値は変更できません。ただし、文字列内の特定の文字または文字列を置換する必要がある状況が発生する場合があります。現時点では、Java の String クラスの replace() メソッドを使用して文字列置換を実装できます。 String クラスの replace() メソッドには 2 つのタイプがあります。

ソースコード: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#出力 上記のコードの出力は、単純に次のように結論付けることができます:finally の前に return が実行されます。バイトコード レベルで何が起こるかを見てみましょう。以下は、case1 メソッドのバイトコードの一部をインターセプトし、ソース コードを比較して、各命令の意味に注釈を付けます。

皆さんこんにちは。今日は Java の基本知識である String についてお話します。 String クラスの重要性は言うまでもなく、バックエンド開発で最もよく使用されるクラスであるため、説明する必要があります。

これは手動アクティベーションを実行したいユーザー向けです。これを行うためのツールに関するサポートが必要な場合は、ここを確認してください。手動アクティベーションプロセスは 2 つの部分に分けることができます。 1- 既製のバッチ ファイルから、インターネットが有効になっていることを確認します。管理者として Windows Powershell を開き、次のように入力してコマンドを指定順に一覧表示します。キーを入力します (上記のリストのキーに置き換えます) 次のコマンドを使用します <key>slmgr/ipk<key> ここからユニバーサル チケットをダウンロードし、ダウンロードしたファイルを解凍します。次に、Powershell に次のコードを入力します (Get-ItemProper

Golang プログラミングでは、バイト、ルーン、文字列型は非常に基本的で一般的なデータ型です。これらは、文字列やファイル ストリームなどのデータ操作の処理において重要な役割を果たします。これらのデータ操作を実行するときは、通常、データを相互に変換する必要があるため、変換スキルを習得する必要があります。この記事では、読者がこれらのデータ型をより深く理解し、プログラミングの実践に上手に適用できるようにすることを目的として、Golang 関数のバイト、ルーン、および文字列の型変換テクニックを紹介します。
