DokuWiki中的特殊搜索错误


Peculiar Search Error in DokuWiki

从DokuWiki论坛交叉发布:

因此,我做了一些修改,以便允许三件事:页面名称的大写,侧栏ToC中的自然大小写排序,以及不区分大小写的搜索。

请原谅我,因为我知道这看起来像一个文件权限错误。我不相信。

在搜索"null"及其任何变体(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

没有也从未有过一个名为"null"的页面。一旦搜索完成,它将在'dokuwiki'data'index'page中添加新行。idx具有与我搜索的内容相同的内容(null, nul, nul等)。一旦这一行被添加到页面上。另外,任何搜索字母"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

再一次,页面" null "在wiki上从未存在过,并且正在被写入page。

以下是我为实现文章开头提到的三件事所做的修改:

/inc/fulltext.php,第255和263行:我将"strpos"替换为"stripos. php "。"

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(Release 2010-11-07a "Anteater"),错误仍然存在。

然后我从splitbrain.org安装了夜间快照,错误仍然存在。

有人有什么想法吗?

原来这是一个Windows特定的错误,由于"NUL"被保留。根据Charles的建议,我将在这里以及在我原始评论链接的论坛帖子中发布答案。我觉得这是一个笨拙的修复,但我需要让它工作。我只是将单词" null "改写为ASCII字符然后将其翻译回来以便在页面和标题中显示:

'inc'pageutil .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);