如何解决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 举报,一经查实,本站将立刻删除。