私は仕事で使用しましたが、この種の表示作業はテンプレートクラスに任せる方が適切だと思います。
私は仕事で使っていますが、この手の表示作業はテンプレートクラスに任せた方が適切だと思います。そこで、このようなプラグインを書きました。
/**
* Smarty プラグイン
* @package Smarty
* @サブパッケージプラグイン
*/
/**
* Smarty email_mask 修飾子プラグイン
*
* タイプ: 修飾子
* 名前: email_mask
* 目的: メールの一部をマスク
* 入力:
* - 文字列: 入力メールアドレス
* - パーツ: マスクパーツ [デフォルト '60'] 単位: パーセント
* - 位置: マスク位置 [デフォルト 'center'] (左、中央、右)
* - MaskString: マスク文字列 [デフォルト '*']
*
* @author wendaming
* @パラメータ文字列
* @param 整数
* @パラメータ文字列
* @パラメータ文字列
* @return stringvoid
*/
関数 Smarty_modifier_email_mask($string, $maskPart = 60, $position = 'center', $maskString = '*') {
$emailName = substr($string, 0, strpos($string, '@'));
$emailLen = strlen($emailName);
$maskNum = Floor($emailLen * $maskPart / 100);
$maskName = '';
if ($position == 'center') {
$beginMask = Floor(($emailLen - $maskNum) / 2);
elseif ($position == 'left') {
$beginMask = 0;
} else {
$beginMask = $emailLen - $maskNum;
}
$count = 0;
for ($i = 0; $i
If ($i >= $beginMask && $count
$maskName .= $maskString;
++ $count;
} else {
$maskName .= $emailName{$i};
}
}
return str_replace($emailName . '@', $maskName . '@', $string);
}