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);
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...