版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年02月湖北省云梦县事业单位2024年统一公开招考39名工作人员笔试参考题库后附答案详解
- 2024年02月河南省濮阳市部分学校2024年公开招聘31名教师4笔试参考题库后附答案详解
- 2024年02月广西巴马瑶族自治县教育卫生系统2024年自主公开招聘79名工作人员13笔试参考题库后附答案详解
- 2024年02月山西省吕梁市部分市直事业单位2024年公开招聘43名工作人员011笔试参考题库后附答案详解
- 2024年02月四川省宜宾市12345运营中心2024年公开招考10名12345政务服务便民热线座席人员笔试参考题库后附答案详解
- 你真的会搭电梯吗-
- 2024年4月北京市学校基建后勤管理事务中心招考聘用笔试参考题库附带答案详解
- 2024年3月湖南衡阳市衡东县医疗保障局及下属事业单位遴选笔试参考题库附带答案详解
- 全国公开课一等奖人教版数学七年级下册《有序数对》比赛课件
- 2024年03月福建省连城县行政服务中心管委会2024年公开招考9名编外合同制工作人员笔试参考题库附带答案详解
- 监理材料质量证明文件范本
- 城镇老旧小区改造工程中的重点和难点以及应对措施
- CNAS-CL01-检测和校准实验室能力认可准则
- 幼儿园幼儿园小班社会《兔奶奶生病了》
- 居民死亡医学证明(推断)书
- 江苏地区二级以上医院名单汇总
- 古籍定级工作方案
- 云南省初中物理学业水平多向细目表
- 村选题调研报告6篇
- 2022国家能源社会招聘上岸笔试历年难、易错点考题附带参考答案与详解
- Unit3Weather单元作业设计
评论
0/150
提交评论