PHPの実使用におけるmb_strwidthの問題点分析_PHPチュートリアル
最近の PHP Web サイトプロジェクトのニュース部分には、タイトルの幅に応じて文字列をインターセプトし、最後に「...」を追加する関数が必要です。最初に思いつくのは、PHP の mb_string を使用することです。 mb_strimwidth.mb_strwidth という関数を使って実装したのですが、タイトルに "" 記号がある場合、PHP mb_strwidth はその記号を幅 1 として扱うことがわかりました。論理的に言えば、これは中国語の二重引用符ではないでしょうか。ワイドバイトでなければならず、長さは2幅でなければなりません。次に、「」のunicodeがそれぞれu201Cとu201Dであり、これらは中国語の文字の範囲内にないことをクエリします。次に、unicode.orgのコードテーブルをクエリして、u2000-を見つけます。 u206F はユニバーサルシンボルの範囲ですが、この範囲の文字はすべてワイドキャラクタ形式ですが、PHP の mb_ 関数では幅 1 であると認識されるため、自分自身に頼るしかありません。
実装されている関数は以下の通りです:
<ol class="dp-xml"> <li class="alt"><span><span>function truncString($str, $length) </span></span></li> <li><span>{ </span></li> <li class="alt"> <span>$</span><span class="attribute">countLen</span><span>=</span><span class="attribute-value">0</span><span>; </span> </li> <li> <span>for($</span><span class="attribute">i</span><span>=</span><span class="attribute-value">0</span><span>;$i</span><span class="tag"><</span><span class="tag-name">mb_strlen</span><span>($str);$i++) </span></li><li class="alt"><span>{ </span></li><li><span>$countLen+=amb_strwidth(mb_substr($str,$i,1)); </span></li><li class="alt"><span>if($countLen</span><span class="tag">></span><span>$length) </span> </li> <li><span>return mb_substr($str,0,$i); </span></li> <li class="alt"><span>} </span></li> <li><span>return $str; </span></li> <li class="alt"><span>} </span></li> <li><span>function amb_strwidth($str_width) </span></li> <li class="alt"><span>{ </span></li> <li> <span>$</span><span class="attribute">count</span><span>=</span><span class="attribute-value">0</span><span>; </span> </li> <li class="alt"> <span>for($</span><span class="attribute">i</span><span>=</span><span class="attribute-value">0</span><span>;$i</span><span class="tag"><</span><span class="tag-name">mb_strlen</span><span>($str_width);$i++) </span> </li> <li><span>{ </span></li> <li class="alt"><span>//if(mb_substr($str_width,$i,1)=="xE2x80x9C"||mb_substr($str_width,$i,1)=='xE2x80x9D') </span></li> <li><span>//如果遇到u2000-u206F内的字符则将计数器加2 </span></li> <li class="alt"><span>if(preg_match("/[x{2000}-x{206F}]/u",mb_substr($str_width,$i,1))) </span></li> <li><span>$count+=2; </span></li> <li class="alt"><span>else </span></li> <li><span>$count+=mb_strwidth(mb_substr($str_width,$i,1)); </span></li> <li class="alt"><span>} </span></li> <li><span>return $count; </span></li> <li class="alt"><span>} </span></li> </ol>
上記は、PHP mb_strwidth を使用する際の問題に対する具体的な解決策です。

ホット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 のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

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