微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DokuWiki中的特殊搜索错误

如何解决DokuWiki中的特殊搜索错误

| 从DokuWiki论坛交叉发布: 因此,我进行了一些修改以便考虑三件事:页面名称中的大写字母,侧边栏ToC中的自然大小写排序以及不区分大小写的搜索。 忍受,因为我知道这看起来像是文件权限错误。我不相信。 搜索\“ nul \”及其任何变体(nUl,Nul,nuL等)后,我收到以下错误消息:
Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 365

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 366

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 367

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 368

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 369

Warning: filesize() [function.filesize]: stat Failed for C:/Websites/dokuwiki/data/Meta/nul.changes in C:\\Websites\\dokuwiki\\inc\\changelog.PHP on line 305
没有并且永远不会有一个名为\“ nul。\”的页面搜索完成后,它将在\\ dokuwiki \\ data \\ index \\ page.idx中添加新行,其内容与我搜索内容相同for(nul,NuL,nUl等)。一旦将该行添加到page.idx,对字母\“ n \” \“ u \”或\“ l \”的任何搜索也将导致错误
Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 365

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 366

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 367

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 368

Warning: Cannot unset offset in a non-array variable in C:\\Websites\\dokuwiki\\inc\\parserutils.PHP on line 369

Warning: filectime() [function.filectime]: stat Failed for C:/Websites/dokuwiki/data/pages/nul.txt in C:\\Websites\\dokuwiki\\inc\\parser\\Metadata.PHP on line 46

Warning: filemtime() [function.filemtime]: stat Failed for C:/Websites/dokuwiki/data/pages/nul.txt in C:\\Websites\\dokuwiki\\inc\\parser\\Metadata.PHP on line 72
再次,页面“ nul”在Wiki上从未存在,并且在搜索时被写入page.idx。 这是我为实现我在文章开头提到的三件事所做的修改: /inc/fulltext.PHP,第255和263行:我将“ strpos”替换为“ stripos”。
if ($id !== \'\' && $cleaned !== \'\') {
        foreach ($pages as $p_id => $p_title) {
            if ((stripos($in_ns ? $p_id : noNSorNS($p_id),$cleaned) === false) &&
                (!$in_title || (stripos($p_title,$id) === false)) ) {
                unset($pages[$p_id]);
            }
        }
    }
    if (isset($ns)) {
        foreach (array_keys($pages) as $p_id) {
            if (stripos($p_id,$ns) !== 0) {
                unset($pages[$p_id]);
            }
        }
    }
/inc/pageutils.PHP,第114行已删除
//$id = utf8_strtolower($id);
/inc/search.PHP,第40和41行:我将\“ sort \”替换为\“ natcasesort \”
natcasesort($files);
natcasesort($dirs);
据我所知,这些都是很小的更改,而且我看不到任何立即显而易见的会导致此问题的事情。 有任何想法吗? 更新- 我还原了所有更改,错误仍然存​​在。 然后,我在完全独立的目录中安装了新的DokuWiki(版本2010-11-07a \“ Anteater \”),错误仍然存​​在。 然后,我从splitbrain.org安装了每晚快照,该错误仍然存​​在。 有人有想法么?     

解决方法

事实证明,这是Windows特定的错误,原因是保留了“ NUL”。根据查尔斯的建议,我将在此处以及原始评论中链接的论坛帖子中发布答案。我觉得这很麻烦,但是我需要使其正常运行。我只是将\“ nul \”改写为ASCII字符,然后将其翻译回以显示在页面和标题中: \\ inc \\ pageutils.php,第137行(ish):
if(strtolower($id) == \'nul\') {
    for($i=0;$i != strlen($id);$i++) {
        $stupidWindowsFix .= \"&#\".ord($id[$i]).\";\";
    }
    $id = $stupidWindowsFix;
}
\\ inc \\ template.php,第876行:
$name = html_entity_decode($id);
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。