php 实现短信模板
PHP 实现短信模板的方法
使用字符串替换方式
在PHP中可以通过字符串替换的方式实现短信模板功能。定义一个包含占位符的模板字符串,然后使用str_replace()或preg_replace()函数进行替换。
$template = "尊敬的{name},您的验证码是{code},有效期{minutes}分钟";
$data = [
'{name}' => '张三',
'{code}' => '123456',
'{minutes}' => '5'
];
$message = str_replace(array_keys($data), array_values($data), $template);
使用sprintf函数
对于简单的模板,可以使用sprintf函数格式化字符串:
$template = "尊敬的%s,您的验证码是%s,有效期%d分钟";
$message = sprintf($template, '张三', '123456', 5);
使用Twig模板引擎
对于复杂的模板需求,可以集成Twig模板引擎:

require_once 'vendor/autoload.php';
$loader = new \Twig\Loader\ArrayLoader([
'sms' => '尊敬的{{ name }},您的验证码是{{ code }},有效期{{ minutes }}分钟',
]);
$twig = new \Twig\Environment($loader);
$message = $twig->render('sms', [
'name' => '张三',
'code' => '123456',
'minutes' => 5
]);
数据库存储模板
将短信模板存储在数据库中,使用时查询并替换:
// 假设从数据库获取模板
$template = "尊敬的{name},您的订单{order_no}已发货";
// 替换逻辑
$replacements = [
'{name}' => '李四',
'{order_no}' => 'ORD20230001'
];
$message = strtr($template, $replacements);
使用类封装模板功能
创建一个专门的短信模板类来管理模板:

class SmsTemplate {
private $templates = [
'verify' => '验证码:{code},有效期{minutes}分钟',
'order' => '订单{order_no}已支付,金额:{amount}元'
];
public function render($type, $data) {
if(!isset($this->templates[$type])) {
throw new Exception('模板不存在');
}
return str_replace(
array_map(function($k) { return '{'.$k.'}'; }, array_keys($data)),
array_values($data),
$this->templates[$type]
);
}
}
// 使用示例
$sms = new SmsTemplate();
$message = $sms->render('verify', ['code' => '654321', 'minutes' => 10]);
国际化和多语言支持
对于多语言应用,可以结合PHP的数组实现:
$templates = [
'zh' => [
'verify' => '验证码:{code},有效期{minutes}分钟'
],
'en' => [
'verify' => 'Verification code: {code}, valid for {minutes} minutes'
]
];
function getSmsMessage($lang, $type, $data) {
global $templates;
$template = $templates[$lang][$type] ?? $templates['en'][$type];
return str_replace(
array_map(function($k) { return '{'.$k.'}'; }, array_keys($data)),
array_values($data),
$template
);
}
安全注意事项
处理短信模板时应注意:
- 对用户输入数据进行过滤和转义
- 验证替换数据的格式和有效性
- 避免模板注入攻击
- 敏感信息如验证码需要设置有效期
以上方法可以根据实际项目需求选择或组合使用,简单场景推荐字符串替换方式,复杂系统建议使用模板引擎或类封装的方式。






