为什么preg_replace_callback 替换中文第一个结果集没有乱码,第二个结果出现乱码?

我用preg_replace_callback 替换含有中文的字符串,返回的所有匹配的结果集没有出现乱码,第一个子结果集出现了乱码。用过转码也不行。

这是我的源代码

header('content-type:text/html;charset=utf-8');
$template='您好,欢迎注册[ce2],您的验证[fong1]码为{value},重复一次,验证码为{value},谢谢。';
$template='册[ce2]';
$template=preg_replace_callback('/(S){3}[(.*?)]/',function ($match) use ($template){

var_dump($match);

},$template);

图片描述

阅读 3.1k
2 个回答

$template=preg_replace_callback('/([\x{4e00}-\x{9fa5}]\[(.*)\])/u',function ($match) use ($template){
var_dump($match);
},$template);

为何要在php这边做这种操作呢?为何不试试ES6的模板字符串在前端渲染,服务器端只提供相关值就好了。
ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings),就是1前面那个字符,反撇号(`)。

例子如下:

function authorize(user, action) {
  if (!user.hasPrivilege(action)) {
    throw new Error(
      `用户 ${user.name} 未被授权执行 ${action} 操作。`);
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题