让TP6支持数据库中文字段,模板中文变量,不喜勿喷

浏览:290 发布日期:2019/07/16 分类:ThinkPHP6专区
试了Laravel的框架支持各种中文,好生羡慕,尝试修改了下
负面BUG未知,不喜勿喷,有新发现再来更新吧
对正则表达式不是很懂,改的可能不完美,希望能有大神能改改吧

1.让TP6支持MYSQL中文字段,注释下面3行正则判断
tp\vendor\topthink\think-orm\src\db\builder\Mysql.php 336行
//if ($strict && !preg_match('/^[\w\.\*]+$/', $key)) {
// throw new Exception('not support data:' . $key);
//}
--------------------- 例子 ---------------------
$this->setAttr('name','aa');
$this->setAttr('备注','aa');
$this->save();

2.让VIEW模板支持中文变量
tp\vendor\topthink\think-template\src\Template.php 函数:getRegex中的
if (strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1) {
$regex = $begin . '((?:[\$]{1,2}[a-wA-w_]|[\:\~][\$a-wA-w_]|[+]{2}[\$][a-wA-w_]|[-]{2}[\$][a-wA-w_]|\/[\*\/])(?>[^' . $end . ']*))' . $end;
} else {
$regex = $begin . '((?:[\$]{1,2}[a-wA-w_]|[\:\~][\$a-wA-w_]|[+]{2}[\$][a-wA-w_]|[-]{2}[\$][a-wA-w_]|\/[\*\/])(?>(?:(?!' . $end . ').)*))' . $end;
}
改成下面的
if (strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1) {
$regex = $begin . '((?:[\$]{1,2}[\S]|[\:\~][\$a-wA-w_]|[+]{2}[\$][a-wA-w_]|[-]{2}[\$][a-wA-w_]|\/[\*\/])(?>[^' . $end . ']*))' . $end;
} else {
$regex = $begin . '((?:[\$]{1,2}[\S]|[\:\~][\$a-wA-w_]|[+]{2}[\$][a-wA-w_]|[-]{2}[\$][a-wA-w_]|\/[\*\/])(?>(?:(?!' . $end . ').)*))' . $end;
}
这个正则有点复杂看不很懂只改了{$变量A}这种的
--------------------- 例子 ---------------------
控制器如下:
View::assign('name','我是name');
View::assign('名称','我是名称');
$数组 = ['name'=>'我是中文[name]','名称'=>'我是中文[名称]'];
View::assign('中文',$数组);
return View();

模板HTML如下:
{$name}<br>
{$名称}<br>
{$中文['name']}<br>
{$中文['名称']}<br>

3.让模板继承支持中文
tp\vendor\topthink\think-template\src\Template.php 函数:getRegex中的if ($single) {
  /*$regex = $begin . '(?:' . $tagName . '\b\s+(?>(?:(?!name=).)*)\bname=([\'\"])(?P<name>[\$\w\-\/\.]+)\\1(?>[^' . $end . ']*)|\/' . $tagName . ')' . $end;*/
  $regex = $begin . '(?:' . $tagName . '\b\s+(?>(?:(?!name=).)*)\bname=([\'\"])(?P<name>[\S]+)\\1(?>[^' . $end . ']*)|\/' . $tagName . ')' . $end;
} else {
  /*$regex = $begin . '(?:' . $tagName . '\b\s+(?>(?:(?!name=).)*)\bname=([\'\"])(?P<name>[\$\w\-\/\.]+)\\1(?>(?:(?!' . $end . ').)*)|\/' . $tagName . ')' . $end;*/
  $regex = $begin . '(?:' . $tagName . '\b\s+(?>(?:(?!name=).)*)\bname=([\'\"])(?P<name>[\S]+)\\1(?>(?:(?!' . $end . ').)*)|\/' . $tagName . ')' . $end;
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>