php中smarty模板中如何使用preg_match_all和preg_replace函数? 100
php中smarty模板中如何使用preg_match_all和preg_replace函数?如:{$get_all_pic=preg_match_all('/(<img...
php中smarty模板中如何使用preg_match_all和preg_replace函数?
如:{$get_all_pic = preg_match_all('/(<img[^>]+alt\s*=\s*"?([^>"\s]+)"?[^>]*[^>]+src\s*=\s*"?([^>"\s]+)"?[^>]*>)/im',$content,$arr_back)}
本地可用,上传服务器后不可用,是不是smarty版本不一样?
案例网址:http://www.xinzaozhuang.com/ 展开
如:{$get_all_pic = preg_match_all('/(<img[^>]+alt\s*=\s*"?([^>"\s]+)"?[^>]*[^>]+src\s*=\s*"?([^>"\s]+)"?[^>]*>)/im',$content,$arr_back)}
本地可用,上传服务器后不可用,是不是smarty版本不一样?
案例网址:http://www.xinzaozhuang.com/ 展开
3个回答
展开全部
Smarty2和Smarty3在实现上差不多,但是在smarty2升级到smarty3的时候还是要注意些许不同。
下面是已知的和smarty2不兼容的地方 == 语法 ==Smarty 3 API有些方面进行了更新。一些Smarty 2 API调用需要更新以便符合Smarty 3。你可能会得到提示,推荐你使用新的语法。可以查看Smarty 3附带的 README 文件获得更多信息。
{$array|@mod} 语法总是让人迷惑,加上@符号说明修饰符作用于数组而不是作用于数组的每个元素。通常你总是想让这个修饰符作用于这个变量而不必考虑它的类型。在 Smarty 3中,{$array|mod} 和 {$smary|@mod}
是等同的。去掉@符号,修饰符仍然作用于数组。如果你想修饰符作用于数据元素,你必须在模板中循环数组,或者使用自定义修饰符以支持数组遍历。
大多smrty函数已经在需要的地方例如{html_options}进行了转义。 == PHP版本 ==Smarty 3 仅支持PHP 5. 在PHP 4将不能正常工作。 == {php} 标记 ==
Smarty 3 默认关闭 {php} 标记支持,不推荐使用。你可以通过设置$smarty->allow_php_tag=true来启用。{php} 块中的变量不再与同一页中的其它{php}块共享作用域,因此在使用的时候要注意。 == 定界符和空格 ==
Smarty 定界符 {} 有空格包围是不再认为是Smarty标记。因此,{ foo } 将被Smarty忽略,但是 {foo} 将被识别。这个变化使得 Javascript/CSS更容易在smarty中使用,而没有必要使用 {literal}.
这个特性可以通过设置 $smarty->auto_literal = false; 禁用。 == 未用引号的字符串 ==
Smarty 2 对于参数中未用引号括起来的字符串有点宽容(并且模棱两可)。Smarty 3 比较严格。对于不包含特殊字符(A-Za-z0-9_之外的字符)的字符串仍然可以不用引号括起来。比如下面例子中文件名就必须用引号括起来。[xhtml]view plaincopy{assign var=foo value=baz} <-- works ok {include file="path/foo.tpl"} <-- needs quotes! == 扩展Smarty类 ==
Smarty 3 遵循PHP5标准构造规则。扩展Smarty类的时候,使用 __construct() 作为类的构造函数的名称。如果你实现自己的构造函数,一定要先调用 parent::__construct() [php]view plaincopyclass MySmarty extends Smarty { function __construct() { parent::__construct(); // your initialization code goes here } } == 自动加载器 ==
Smarty 用spl_autoload_register函数 实现了它自己的自动加载器。如果想在自己的应用中使用自动加载器,就必须使用此方法注册。
使用 __autoload() 将失败。 这是PHP5标准自动加载函数。可以查看
http://us3.php.net/manual/en/function.spl-autoload-register.php== 插件文件名 ==
自从Smarty 3使用默认的spl自动加载器,就要求插件文件名使用小写字母。Smarty 2 允许使用大小写混合插件名,你必须重命名以用于smarty 3. == Smarty特殊变量作用域 ==
在Smarty 2中Smarty特殊变量 $smarty.section.* and $smarty.foreach.*
拥有全局作用域。如果子模板中含有同名的循环,就会覆盖父模板中的值。在Smarty 3中这些特殊变量将只作用于定义循环所在的模板。若是需要在子模板中使用,就不得不使用参数传递。
<source lang="smarty">
{include file="path/foo.tpl" index=$smarty.section.foo.index}
</source>== SMARTY_RESOURCE_CHAR_SET ==
Smarty 3 设置常量 SMARTY_RESOURCE_CHAR_SET 为 utf-8作为模版文件的默认字符集.
只是作为像 escape 等函数的默认字符集. 如果你的模板使用其它字符集, 就必须自己定义这个常量.== trigger_error()
API 函数 trigger_error() 已被移除。 == Smarty 常量 ==
下面这些常量
SMARTY_PHP_PASSTHRU
SMARTY_PHP_QUOTE
SMARTY_PHP_REMOVE
SMARTY_PHP_ALLOW
已被类常量替代
Smarty::PHP_PASSTHRU
Smarty::PHP_QUOTE
Smarty::PHP_REMOVESmarty::PHP_ALLOW
下面是已知的和smarty2不兼容的地方 == 语法 ==Smarty 3 API有些方面进行了更新。一些Smarty 2 API调用需要更新以便符合Smarty 3。你可能会得到提示,推荐你使用新的语法。可以查看Smarty 3附带的 README 文件获得更多信息。
{$array|@mod} 语法总是让人迷惑,加上@符号说明修饰符作用于数组而不是作用于数组的每个元素。通常你总是想让这个修饰符作用于这个变量而不必考虑它的类型。在 Smarty 3中,{$array|mod} 和 {$smary|@mod}
是等同的。去掉@符号,修饰符仍然作用于数组。如果你想修饰符作用于数据元素,你必须在模板中循环数组,或者使用自定义修饰符以支持数组遍历。
大多smrty函数已经在需要的地方例如{html_options}进行了转义。 == PHP版本 ==Smarty 3 仅支持PHP 5. 在PHP 4将不能正常工作。 == {php} 标记 ==
Smarty 3 默认关闭 {php} 标记支持,不推荐使用。你可以通过设置$smarty->allow_php_tag=true来启用。{php} 块中的变量不再与同一页中的其它{php}块共享作用域,因此在使用的时候要注意。 == 定界符和空格 ==
Smarty 定界符 {} 有空格包围是不再认为是Smarty标记。因此,{ foo } 将被Smarty忽略,但是 {foo} 将被识别。这个变化使得 Javascript/CSS更容易在smarty中使用,而没有必要使用 {literal}.
这个特性可以通过设置 $smarty->auto_literal = false; 禁用。 == 未用引号的字符串 ==
Smarty 2 对于参数中未用引号括起来的字符串有点宽容(并且模棱两可)。Smarty 3 比较严格。对于不包含特殊字符(A-Za-z0-9_之外的字符)的字符串仍然可以不用引号括起来。比如下面例子中文件名就必须用引号括起来。[xhtml]view plaincopy{assign var=foo value=baz} <-- works ok {include file="path/foo.tpl"} <-- needs quotes! == 扩展Smarty类 ==
Smarty 3 遵循PHP5标准构造规则。扩展Smarty类的时候,使用 __construct() 作为类的构造函数的名称。如果你实现自己的构造函数,一定要先调用 parent::__construct() [php]view plaincopyclass MySmarty extends Smarty { function __construct() { parent::__construct(); // your initialization code goes here } } == 自动加载器 ==
Smarty 用spl_autoload_register函数 实现了它自己的自动加载器。如果想在自己的应用中使用自动加载器,就必须使用此方法注册。
使用 __autoload() 将失败。 这是PHP5标准自动加载函数。可以查看
http://us3.php.net/manual/en/function.spl-autoload-register.php== 插件文件名 ==
自从Smarty 3使用默认的spl自动加载器,就要求插件文件名使用小写字母。Smarty 2 允许使用大小写混合插件名,你必须重命名以用于smarty 3. == Smarty特殊变量作用域 ==
在Smarty 2中Smarty特殊变量 $smarty.section.* and $smarty.foreach.*
拥有全局作用域。如果子模板中含有同名的循环,就会覆盖父模板中的值。在Smarty 3中这些特殊变量将只作用于定义循环所在的模板。若是需要在子模板中使用,就不得不使用参数传递。
<source lang="smarty">
{include file="path/foo.tpl" index=$smarty.section.foo.index}
</source>== SMARTY_RESOURCE_CHAR_SET ==
Smarty 3 设置常量 SMARTY_RESOURCE_CHAR_SET 为 utf-8作为模版文件的默认字符集.
只是作为像 escape 等函数的默认字符集. 如果你的模板使用其它字符集, 就必须自己定义这个常量.== trigger_error()
API 函数 trigger_error() 已被移除。 == Smarty 常量 ==
下面这些常量
SMARTY_PHP_PASSTHRU
SMARTY_PHP_QUOTE
SMARTY_PHP_REMOVE
SMARTY_PHP_ALLOW
已被类常量替代
Smarty::PHP_PASSTHRU
Smarty::PHP_QUOTE
Smarty::PHP_REMOVESmarty::PHP_ALLOW
追问
这个我看到过,同样谢谢你
展开全部
smarty3中可以直接赋值和使用php的函数的,检查一下smarty的版本和配置是否一致吧。
追问
服务器里面的网站系统是使用的Smarty2.0版本 ,本机是Smarty3.0版本,确实是版本问题,但不知道如何解决?怎么升级到3.0版本?之前的程序需要改动吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你升级版本后测试一下就知道需不需要修改程序了。如有问题,再贴出来大家看看。
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询