如何更正已弃用的功能?

时间:2015-11-05 22:55:25

标签: php markdown pmwiki

让我列出到目前为止的情景。我刚刚开始设置PMWiki安装。到目前为止,这么好,对吗?

所以我按照PMWiki Cookbook for Pagetoc中的说明添加pagetoc.php。接下来,我想添加Markdown支持。因此Google搜索将我带到了Cookbook for Markdown。它还指出MarkdownMarkupExtension Cookbook是要检查的东西。两者都已安装。我不确定它是否与两者相冲突,但似乎没有任何东西在抛出......除了下面的错误。

Pagetoc.php效果很好。什么不是markdown.php。生成的错误如下:

ERROR: pat=/\(:markdown:\)(.*?)[ ]?\(:markdownend:\)/se preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

现在......这是markdown.php中的相关代码。

显然,修复是使用preg_replace_callback()功能。我正在看这个,看起来像是一团面条给我。我不确定向前迈出的正确的一步是为了解决这个问题。我对PHP不熟悉,无法按照建议使用该功能。

<?php if (!defined('PmWiki')) exit();
#
# Markdown  -  
#
# Copyright (c) 2006 Benjamin C. Wilson
# <http://www.dausha.net/Markdown/Recipe>
#

#$EnableMarkdownInline = 0;

include_once("$FarmC/pagetoc.php");
include_once("$FarmD/scripts/diag.php");
SDV($EnableMarkdown,0); # Off by default.
SDV($MarkdownSectionLevel, '!!'); # Creates <h2> for === sections.
SDV($MarkdownSubSectionLevel, '!!!'); # Creates <h3> for --- sections.
SDV($MarkdownSubSubSectionLevel, '!!!!'); # Creates <h4> for --- sections.
if ($EnableMarkdown) {
    $EnableStdMarkup = 0; # Turn off PmWiki's markup behavior.
    SDV($MarkdownTabWidth, 4);
    SDV($MarkdownTabLessOne, $MarkdownTabWidth - 1);
    SDV($EnableMarkdownInline, 1);
    SDV($EnableMarkdownLinks, 1);
    SDV($EnableMarkdownBlock, 1);
    SDV($EnableMarkdownPrecode, 1);
    SDV($EnableMarkdownLists, 1);
    SDV($EnableMarkdownBlockquotes, 1);
    include_once("markdown/pmwiki-directives.php");
    include_once("markdown/pmwiki-links.php");
    include_once("markdown/pmwiki-advtables.php");
    include_once("markdown/pmwiki-block.php");
    include_once("markdown/pmwiki-inline.php"); # Added 2006-05-07 BCWI
    $HTMLVSpace = '';
}
if ($EnableMarkdownInline) include_once("markdown/markdown-inline.php");
if ($EnableMarkdownLinks)  include_once("markdown/markdown-links.php");
if ($EnableMarkdownBlock)  include_once("markdown/markdown-block.php");
if ($EnableMarkdownPrecode)  include_once("markdown/markdown-precode.php");
if ($EnableMarkdownLists)  include_once("markdown/markdown-lists-0.2.php");
if ($EnableMarkdownBlockquotes)  include_once("markdown/markdown-blockquotes.php");

/*
#Markup("prebullet", "<bullet", "/^(\s+)\\*\s/e", "deindent('$1','*');");
#Markup("preordered", "<orderedlists", "/^(\s+)(\\#|[0-9]+\.)\s/e", "deindent('$1','#');");
function deindent($stuff,$type) {
    $level = (int) strlen($stuff) / 3;
    return str_pad('',$level,$type);
}
## bullet lists
Markup('bullets','block','/^(\\*+)\\s?(\\s*)/','<:ul,$1,$0>$2');
Markup('orderedlists','<bullets','/^(#+)\\s?(\\s*)/','<:ol,$1,$0>$2');
*/

2 个答案:

答案 0 :(得分:2)

阅读PmWiki / CustomMarkup,其中描述了Markup_e()函数,它涵盖了大部分工作。您需要在最后找到包含/e的正则表达式的实例,理想情况下已经在调用Markup(),并按如下方式编辑它们:

在:

Markup('mkatxheading','<preordered', '/(#{1,6})\s*(\w.*?)#+/e', "MarkdownAtxHeading('$1','$2');");

后:

Markup_e('mkatxheading','<preordered', '/(#{1,6})\s*(\w.*?)#+/', "MarkdownAtxHeading(\$m[1],\$m[2]);");

请注意,您使用的食谱已经过时(2006年5月),因此可能还有其他问题。请务必将修复程序返回到配方页面。

答案 1 :(得分:0)

这些食谱看起来很旧,并没有修补为符合PHP55标准(如pmwiki.org所述)。

如果您不熟悉配方代码,PmWiki Users mailing list通常是联系食谱作者并向他们提出建议的最佳位置。