thinksns模板乱码解决_第1页
thinksns模板乱码解决_第2页
thinksns模板乱码解决_第3页
thinksns模板乱码解决_第4页
thinksns模板乱码解决_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、thinksns页面出现乱码可能情况之一:此处是控制标签的解析,关闭解析,本地服务器上,出现的错误,与正式服上一样。 Template.class.php文件 /* * TagLib库解析 * access public * param string $tagLib 要解析的标签库 * param string $content 要解析的模板内容 * param boolen $hide 是否隐藏标签库前缀 * return string */ public function parseTagLib($tagLib,&$content,$hide=false) $begin = $th

2、is->config'taglib_begin' $end = $this->config'taglib_end' $tLib = get_instance_of('TagLibCx'); if($tLib->valid() /如果标签库有效则取出支持标签列表 $tagList = $tLib->getTagList(); /* if($_GET'app'='admin'&&$tagList1'name'!='php')/twx314/prin

3、t_r($_GET);/print_r($tagList);exit;/unset($tagList1);$tagList = array('name'=>'php','nested'=>true,'bodycontent'=>true); */ /遍历标签列表进行模板标签解析 foreach($tagList as $tag) / 实际要解析的标签名称 if( !$hide) $startTag = $tagLib.':'.$tag'name' else $startTag =

4、$tag'name' / 检查可嵌套标签以及嵌套级别 if($tag'nested' && $this->config'tag_level'>1) $level = $this->config'tag_level' else $level = 1; $endTag = $startTag; /由于网站程序解析出错,标签解析不了,出现乱码,暂时关闭此处的标签判断 if(false != stripos($content,C('TAGLIB_BEGIN').$startTag) if(

5、empty($tag'attribute') / 无属性标签 if($tag'content' !='empty') for($i=0;$i<$level;$i+) $content = preg_replace('/'.$begin.$startTag.'(s*?)'.$end.'(.*?)'.$begin.'/'.$endTag.'(s*?)'.$end.'/eis',"$this->parseXmlTag('&quo

6、t;.$tagLib."','".$tag'name'."','1','2')",$content); else $content = preg_replace('/'.$begin.$startTag.'(s*?)/(s*?)'.$end.'/eis',"$this->parseXmlTag('".$tagLib."','".$tag'name'.&

7、quot;','1','')",$content); elseif($tag'content' !='empty') /闭合标签解析 for($i=0;$i<$level;$i+) $content = preg_replace('/'.$begin.$startTag.'s(.*?)'.$end.'(.+?)'.$begin.'/'.$endTag.'(s*?)'.$end.'/eis',"$this

8、->parseXmlTag('".$tagLib."','".$tag'name'."','1','2')",$content); else /开放标签解析 / 开始标签必须有一个空格 $content = preg_replace('/'.$begin.$startTag.'s(.*?)/(s*?)'.$end.'/eis',"$this->parseXmlTag('".$ta

9、gLib."','".$tag'name'."','1','')",$content); 二:服务器上的标签库xml与本地的完全一样,服务器上时好时坏。因此,怀疑可能是生成临时文件出现问题。检查出错时,临时文件的内容。因为服务器上,有时正常,有时不正常,抽取多次,进行选样。如果是生成临时文件有问题,检查生成临时文件这个过程环节是哪里出错。 functions.inc.php中的fetch函数: / 渲染模板/$charset 不能是UTF8 否则IE下会乱码function fetc

10、h($templateFile='',$tvar=array(),$charset='utf-8',$contentType='text/html',$display=false) /注入全局变量tsglobal $ts;$tvar'ts' = $ts;unset($tvar'templateCacheFile',$tvar'templateFile');/$GLOBALS'_viewStartTime' = microtime(TRUE);if(null=$templateFile

11、)/ 使用null参数作为模版名直接返回不做任何输出return ;if(empty($charset) $charset = C('DEFAULT_CHARSET');/print_r($display);print_r($templateFile);/ 网页字符编码header("Content-Type:".$contentType." charset=".$charset);header("Cache-control: private"); /支持页面回跳/页面缓存ob_start();ob_implicit_

12、flush(0); / 模版名为空.if(''=$templateFile)$templateFile = APP_TPL_PATH.'/'.MODULE_NAME.'/'.ACTION_NAME.'.html'/ 模版名为ACTION_NAMEelseif(file_exists(APP_TPL_PATH.'/'.MODULE_NAME.'/'.$templateFile.'.html') $templateFile = APP_TPL_PATH.'/'.MODUL

13、E_NAME.'/'.$templateFile.'.html' elseif(file_exists(APP_TPL_PATH.'/'.$templateFile.'.html') $templateFile = APP_TPL_PATH.'/'.$templateFile.'.html'/ 模版是绝对路径elseif(file_exists($templateFile)/ 模版不存在elsethrow_exception(L('_TEMPLATE_NOT_EXIST_').

14、9;'.$templateFile.'');/模版缓存文件$templateCacheFile = C('TMPL_CACHE_PATH').'/'.APP_NAME.'_'.tsmd5($templateFile).'.php' /载入模版缓存if(!$ts'_debug' && file_exists($templateCacheFile) /twx314 &&false/if(1=2) /TODO 开发extract($tvar, EXTR_OVERWR

15、ITE);/载入模版缓存文件if(C('TS_CACHE_TYPE')='SAEMC')$mmc=memcache_init();if($mmc=false) exit( "mc init failedn" );$content = memcache_get($mmc,$templateCacheFile);eval(' ?> ' . $content);elseinclude $templateCacheFile;/重新编译elsetshook('tpl_compile',array('temp

16、lateFile',$templateFile);/ 缓存无效 重新编译tsload(CORE_LIB_PATH.'/Template.class.php');tsload(CORE_LIB_PATH.'/TagLib.class.php');tsload(CORE_LIB_PATH.'/TagLib/TagLibCx.class.php');$tpl = Template:getInstance();/ 编译并加载模板文件$tpl->load($templateFile,$tvar,$charset);/ 获取并清空缓存$cont

17、ent = ob_get_clean();/print_r($replace);print_r(time();exit;/ 模板内容替换$replace = array( '_ROOT_' => SITE_URL, / 当前网站地址 '_UPLOAD_' => UPLOAD_URL, / 上传文件地址/'_PUBLIC_' => PUBLIC_URL, / 公共静态地址 '_PUBLIC_' => THEME_PUBLIC_URL, / 公共静态地址 '_THEME_' => THEM

18、E_PUBLIC_URL, / 主题静态地址 '_APP_' => APP_PUBLIC_URL, / 应用静态地址 '_URL_' => _ROOT_.'/'.ROOT_FILE.'?app='.APP_NAME.'&mod='.MODULE_NAME,);if(C('TOKEN_ON') if(strpos($content,'_TOKEN_') / 指定表单令牌隐藏域位置$replace'_TOKEN_' = $this->buildF

19、ormToken();elseif(strpos($content,'_NOTOKEN_')/ 标记为不需要令牌验证$replace'_NOTOKEN_' = ''elseif(preg_match('/</form(s*)>/is',$content,$match) / 智能生成表单令牌隐藏域$replace$match0 = $this->buildFormToken().$match0;/ 允许用户自定义模板的字符串替换if(is_array(C('TMPL_PARSE_STRING') )

20、$replace = array_merge($replace,C('TMPL_PARSE_STRING');$content = str_replace(array_keys($replace),array_values($replace),$content);/ 布局模板解析/$content = $this->layout($content,$charset,$contentType);/ 输出模板文件if($display)echo $content;elsereturn $content;经检验,生成乱码的原因是:服务器端开启了debug。而开启了debug后,

21、每次都会访问任何程序,都会对该程序的模板进行解析,生成“缓存模板”。而不开启debug,则每次会直接读取“缓存模板”。在本地开发程序,“缓存模板”是否重新生成,影响不大,因为此时只有开发者一人访问。在正式服务器上,有N多人访问。在对同一个“缓存模板”的读取与生成之间,自然容易出现错误。在开发初期,我们在某些模块的测试阶段,可以对部分模块开启刷新缓存模板的功能,我的建议是,方法一:在config.inc.php中设置一个数组。在数组中存放app及对应的mod。在fetch函数中,判断是否重新生成“缓存模板”时,访问路径与该数组进行对比,在数组中,则重新生成“缓存模板”。方法二:在后台写一个程序,

22、按模块设置,哪些程序重新生成“缓存模板”。在fetch函数中,读取该数据表,并进行判断。符fetch函数(其中增加了一点为了判断是否是缓存原因,拷贝缓存的程序) / 渲染模板/$charset 不能是UTF8 否则IE下会乱码function fetch($templateFile='',$tvar=array(),$charset='utf-8',$contentType='text/html',$display=false) /注入全局变量tsglobal $ts;$tvar'ts' = $ts;unset($tvar'

23、;templateCacheFile',$tvar'templateFile');/$GLOBALS'_viewStartTime' = microtime(TRUE);if(null=$templateFile)/ 使用null参数作为模版名直接返回不做任何输出return ;if(empty($charset) $charset = C('DEFAULT_CHARSET');/print_r($display);print_r($templateFile);/ 网页字符编码header("Content-Type:"

24、;.$contentType." charset=".$charset);header("Cache-control: private"); /支持页面回跳/页面缓存ob_start();ob_implicit_flush(0); / 模版名为空.if(''=$templateFile)$templateFile = APP_TPL_PATH.'/'.MODULE_NAME.'/'.ACTION_NAME.'.html'/ 模版名为ACTION_NAMEelseif(file_exists(

25、APP_TPL_PATH.'/'.MODULE_NAME.'/'.$templateFile.'.html') $templateFile = APP_TPL_PATH.'/'.MODULE_NAME.'/'.$templateFile.'.html' elseif(file_exists(APP_TPL_PATH.'/'.$templateFile.'.html') $templateFile = APP_TPL_PATH.'/'.$template

26、File.'.html'/ 模版是绝对路径elseif(file_exists($templateFile)/ 模版不存在elsethrow_exception(L('_TEMPLATE_NOT_EXIST_').''.$templateFile.'');/模版缓存文件$templateCacheFile = C('TMPL_CACHE_PATH').'/'.APP_NAME.'_'.tsmd5($templateFile).'.php' /app=public&am

27、p;mod=Index&act=index/拷贝缓存模板 if(strtolower($_GET"app")="public"&&strtolower($_GET"mod")="index"&&strtolower($_GET"act")="index") $temp=file_exists($templateFile); $path=C('TMPL_CACHE_PATH').'/'.'index

28、temp/' if (!file_exists($path) /createFolder(dirname($path); mkdir($path, 0777); $newfilename=$path.APP_NAME.'_'.tsmd5($templateFile).'.php'.date('.ymdhis',time(); copy($templateCacheFile,$newfilename); /* dump($path); dump($newfilename); dump($templateCacheFile); exit();

29、 */ /载入模版缓存if(!$ts'_debug' && file_exists($templateCacheFile) /twx314 &&false /if(1=2) /TODO 开发extract($tvar, EXTR_OVERWRITE);/载入模版缓存文件if(C('TS_CACHE_TYPE')='SAEMC')$mmc=memcache_init();if($mmc=false) exit( "mc init failedn" );$content = memcache_get

30、($mmc,$templateCacheFile);eval(' ?> ' . $content);elseinclude $templateCacheFile;/重新编译elsetshook('tpl_compile',array('templateFile',$templateFile);/ 缓存无效 重新编译tsload(CORE_LIB_PATH.'/Template.class.php');tsload(CORE_LIB_PATH.'/TagLib.class.php');tsload(CORE_LIB_PATH.'/TagLib/TagLibCx.class.php');$tpl = Template:getInstance();/ 编译并加载模板文件$tpl->load($templateFile,$tvar,$charset);/ 获取并清空缓存$content = ob_get_clean();/print_r($replace);print_r(time();exit;/ 模板内容替换$replace = array( '_ROOT_' => SITE_URL, / 当前网站地址 '

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论