dokuwiki中文文件名及sitemap乱码的解决

dokuwiki默认是使用urlencode函数对文件名进行编码后存储的,而索引文章的indexer.php文件在生成sitemap.xml时也会对文件名编码,这样对搜索引擎是不友好的,实际上将这两个编码的功能去掉就可以了。

中文文件名的乱码可以参考http://www.dokuwiki.org/zh:pagename进行更改,即:

而生成sitemap.xml文件的是"/lib/exe/indexer.php"文件,打开这个文件,搜索runSitemapper()函数,在函数下有此语句:

其中wl函数为重写url的,在wl函数的定义在"/inc/common.php"文件内,其中有一语句:

idfilter即是进行编码转换的,只需要在common.php中去掉那一行即可。

作者: 勿慢牛

安全方向,化學/化工專業,主要關注學佛、計算化學、C++、Python、計算機、古文化、哲學、思維方向,渴求與有共同興趣的朋友交流,詳情請查看“關于”頁面。

《dokuwiki中文文件名及sitemap乱码的解决》有3个想法

    1. 版本:2015-08-10a “Detritus”

      dokuwiki 使用utf-8存储数据 Dokuwiki-UTF-8 Encoding

      上传的文件默认使用UrlEncode后保存,中文文件名会被替换成一长串的字母

      打开 .dokuwiki\conf\local.php 添加一行配置
      $conf[‘fnencode’] = ‘utf-8’;

      – Type: String
      – Default: url
      – Possible values:
      – url – use URL encoding, can produce very long filenames
      – safe – use more compact encoding (recommended)
      – utf-8 – use no encoding at all and store filenames in UTF-8

      添加之后,文件名将以utf-8的编码保存。

      但是Windows环境下,utf-8保存的文件还是会显示乱码,我们需要将utf-8转换成gb2312才行
      将上面:$conf[‘fnencode’] = ‘utf-8’;
      替换成:$conf[‘fnencode’] = ‘gb2312’;

      打开 .dokuwiki\inc\pageutils.php 修改以下两个函数

      /**
      * Encode a UTF-8 filename to use on any filesystem
      *
      * Uses the ‘fnencode’ option to determine encoding
      *
      * When the second parameter is true the string will
      * be encoded only if non ASCII characters are detected –
      * This makes it safe to run it multiple times on the
      * same string (default is true)
      *
      * @author Andreas Gohr
      * @see urlencode
      *
      * @param string $file file name
      * @param bool $safe if true, only encoded when non ASCII characters detected
      * @return string
      */
      function utf8_encodeFN($file,$safe=true){
      global $conf;
      if($conf[‘fnencode’] == ‘utf-8’) return $file;

      if($safe && preg_match(‘#^[a-zA-Z0-9/_\-\.%]+$#’,$file)){
      return $file;
      }

      if($conf[‘fnencode’] == ‘safe’){
      return SafeFN::encode($file);
      }

      if($conf[‘fnencode’] == ‘gb2312’){
      return iconv(‘UTF-8’, ‘GB2312’, $file);
      }

      $file = urlencode($file);
      $file = str_replace(‘%2F’,’/’,$file);
      return $file;
      }

      /**
      * Decode a filename back to UTF-8
      *
      * Uses the ‘fnencode’ option to determine encoding
      *
      * @author Andreas Gohr
      * @see urldecode
      *
      * @param string $file file name
      * @return string
      */
      function utf8_decodeFN($file){
      global $conf;
      if($conf[‘fnencode’] == ‘utf-8’) return $file;

      if($conf[‘fnencode’] == ‘safe’){
      return SafeFN::decode($file);
      }

      if($conf[‘fnencode’] == ‘gb2312’){
      return iconv(‘GB2312’, ‘UTF-8’, $file);
      }

      return urldecode($file);
      }

      1. 我在我的dokuwiki进行了对应的修改,但是文件名中文的显示不出来。

发表评论

电子邮件地址不会被公开。 必填项已用*标注