THinkPHP 3.1.3 開発テンプレートは、中国語の文字列データの長さをインターセプトします。ウェブサイトの機能開発、ウェブサイトの模倣、難しいプログラミング、プロのエンジニアにお問い合わせください QQ467477957
thinkphp テンプレートで中国語の文字列コードをインターセプトする方法
プロジェクト開発中に、中国語の文字列インターセプトに関する問題がよく発生します。たとえば、ニュース リスト ページでニュース コンテンツの簡単な紹介が必要な場合、文字列インターセプトが必要になります。ここで、カプセル化された文字列インターセプト関数を共有します。 機能の説明: <code class="prettyprint linenums lang-php">函数解释:<br>
msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true)<br>
$str:要截取的字符串<br>
$start=0:开始位置,默认从0开始<br>
$length:截取长度<br>
$charset=”utf-8″:字符编码,默认UTF-8<br>
$suffix=true:是否在截取后的字符后面显示省略号,默认true显示,false为不显示<br>
模版使用:{$vo.title|msubstr=0,5,'utf-8',false}
msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true)function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) <br>
{ <br>
if(function_exists("mb_substr")){ <br>
if($suffix) <br>
return mb_substr($str, $start, $length, $charset)."..."; <br>
else<br>
return mb_substr($str, $start, $length, $charset); <br>
} <br>
elseif(function_exists('iconv_substr')) { <br>
if($suffix) <br>
return iconv_substr($str,$start,$length,$charset)."..."; <br>
else<br>
return iconv_substr($str,$start,$length,$charset); <br>
} <br>
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef]<br>
[x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/"; <br>
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/"; <br>
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/"; <br>
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/"; <br>
preg_match_all($re[$charset], $str, $match); <br>
$slice = join("",array_slice($match[0], $start, $length)); <br>
if($suffix) return $slice."…"; <br>
return $slice;<br>
}
$str: インターセプトする文字列
$start=0: 開始位置、デフォルトでは 0 から始まります <tr><br>
<td width="15%" class="altbg1" ><b>简述:</b></td><br>
<td width="85%" class="altbg2"><label><br>
<br>
<textarea name="brief" cols="50" id="brief">{$data.brief|msubstr=0,36,'utf-8',false}</textarea><br>
<span class="STYLE2">*简述,默认截取36个中文汉字的字符数</span><br>
</label></td><br>
</tr>
$length: 切片の長さ
$charset="utf-8": 文字エンコーディング、デフォルトは UTF-8
$suffix=true: インターセプトされた文字の後に省略記号を表示するかどうか。デフォルトは表示する場合は true、表示しない場合は false です。
テンプレートの使用法: {$vo.title|msubstr=0,5,'utf-8',false} 次のコードを thinkphp コア パッケージの /common/functions.php の最後に貼り付けると、次のようになります。 HTML モデル内で function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) <img src="/Uploads/editor/2016-06-15/57607d6e35f9a.png" alt="Zhang Jinjie - THinkPHP 開発テンプレートにおける中国語文字列データ長のインターセプト" > を直接使用します。
{ <p class="da_word">
if(function_exists("mb_substr")){ </p>
If($suffix)
MB_SUBSTR($ str、$ start、$ length、$ charset)
その他
return mb_substr($str, $start, $length, $charset);
elseif(function_exists('iconv_substr')) {
If($suffix)
return iconv_substr($str,$start,$length,$charset)."...";
その他
iconv_substr($str,$start,$length,$charset) を返します
$ re ['utf-8']
[x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$ re ['gbk']
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
Preg_match_all($re[$charset], $str, $match);
$slice = join("",array_slice($match[0], $start, $length));
If($suffix) は $slice を返します。"…";
return $slice;
}
開発テンプレート、<tr> で使用されます。
<td width="15%" class="altbg1" ><b>簡単な説明:</b></td>
<td width="85%" class="altbg2"><label>
<textarea name="brief"cols="50" id="brief">{$data.brief|msubstr=0,36,'utf-8',false}</textarea>
<span class="STYLE2">*簡単な説明、デフォルトでは 36 文字の中国語文字がインターセプトされます</span>
</label></td>
</tr>
広告: 本当に無料、ドメイン名 + 仮想マシン + 企業メール = 0 元