所以,我做了一些修改,以便允许三件事:页面名称中的大写,侧栏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添加一个新行,其内容与我搜索的内容相同(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”在维基上并不存在,并且在搜索时被写入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行:我用“natcasesort”替换了“sort”
natcasesort($files);
natcasesort($dirs);
据我所知,这些都是微不足道的变化,我没有看到任何可能导致此问题的明显变化。
有什么想法吗?
更新 -
我恢复了所有更改,错误仍然存在。
然后我在一个完全独立的目录中安装了一个新的DokuWiki(Release 2010-11-07a“Anteater”),错误仍然存在。
然后我从splitbrain.org安装了每晚快照,错误仍然存在。
有人有什么想法吗?
答案 0 :(得分:0)
事实证明,由于“NUL”被保留,这是Windows特定的错误。根据查尔斯的建议,我将在此处以及在原始评论中链接的论坛帖子中发布答案。我觉得这是一个kludgey修复,但我需要让它工作。我只是将单词“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);