Merge pull request #225 from shubo83/master

修复了在php5.4以上版本中pcre库版本略低出现的preg_match或preg_match_all函数报无法识别字符错误,并且可以向上兼容
This commit is contained in:
ThinkPHP
2016-07-27 22:06:46 -05:00
committed by GitHub
2 changed files with 6 additions and 6 deletions

View File

@@ -699,7 +699,7 @@ class Template
*/ */
public function parseAttr($str, $name = null) public function parseAttr($str, $name = null)
{ {
$regex = '/\s+(?>(?<name>[\w-]+)\s*)=(?>\s*)([\"\'])(?<value>(?:(?!\\2).)*)\\2/is'; $regex = '/\s+(?>(?P<name>[\w-]+)\s*)=(?>\s*)([\"\'])(?P<value>(?:(?!\\2).)*)\\2/is';
$array = []; $array = [];
if (preg_match_all($regex, $str, $matches, PREG_SET_ORDER)) { if (preg_match_all($regex, $str, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) { foreach ($matches as $match) {
@@ -1114,9 +1114,9 @@ class Template
switch ($tagName) { switch ($tagName) {
case 'block': case 'block':
if ($single) { if ($single) {
$regex = $begin . '(?:' . $tagName . '\b(?>(?:(?!name=).)*)\bname=([\'\"])(?<name>[\$\w\-\/\.]+)\\1(?>[^' . $end . ']*)|\/' . $tagName . ')' . $end; $regex = $begin . '(?:' . $tagName . '\b(?>(?:(?!name=).)*)\bname=([\'\"])(?P<name>[\$\w\-\/\.]+)\\1(?>[^' . $end . ']*)|\/' . $tagName . ')' . $end;
} else { } else {
$regex = $begin . '(?:' . $tagName . '\b(?>(?:(?!name=).)*)\bname=([\'\"])(?<name>[\$\w\-\/\.]+)\\1(?>(?:(?!' . $end . ').)*)|\/' . $tagName . ')' . $end; $regex = $begin . '(?:' . $tagName . '\b(?>(?:(?!name=).)*)\bname=([\'\"])(?P<name>[\$\w\-\/\.]+)\\1(?>(?:(?!' . $end . ').)*)|\/' . $tagName . ')' . $end;
} }
break; break;
case 'literal': case 'literal':
@@ -1142,9 +1142,9 @@ class Template
$name = 'name'; $name = 'name';
} }
if ($single) { if ($single) {
$regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?<name>[\$\w\-\/\.\:@,\\\\]+)\\1(?>[^' . $end . ']*)' . $end; $regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?P<name>[\$\w\-\/\.\:@,\\\\]+)\\1(?>[^' . $end . ']*)' . $end;
} else { } else {
$regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?<name>[\$\w\-\/\.\:@,\\\\]+)\\1(?>(?:(?!' . $end . ').)*)' . $end; $regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?P<name>[\$\w\-\/\.\:@,\\\\]+)\\1(?>(?:(?!' . $end . ').)*)' . $end;
} }
break; break;
} }

View File

@@ -224,7 +224,7 @@ class TagLib
*/ */
public function parseAttr($str, $name, $alias = '') public function parseAttr($str, $name, $alias = '')
{ {
$regex = '/\s+(?>(?<name>[\w-]+)\s*)=(?>\s*)([\"\'])(?<value>(?:(?!\\2).)*)\\2/is'; $regex = '/\s+(?>(?P<name>[\w-]+)\s*)=(?>\s*)([\"\'])(?P<value>(?:(?!\\2).)*)\\2/is';
$result = []; $result = [];
if (preg_match_all($regex, $str, $matches)) { if (preg_match_all($regex, $str, $matches)) {
foreach ($matches['name'] as $key => $val) { foreach ($matches['name'] as $key => $val) {