You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制MediaWiki输出未编码的&?自动编码问题及扩展咨询

解决MediaWiki输出原生&而非编码后&的方案

我之前也被MediaWiki的自动编码坑过,确实头疼——尤其是写带逻辑判断的JS脚本时,&&被转成&&完全没法用,Nowiki标签确实解决不了这个问题,给你几个亲测有效的方案:

1. 用Raw HTML扩展(最直接的方案)

这个扩展专门用来插入未被转义的原始HTML/JS代码,能直接保留原生的&符号。启用后,把需要保留原始格式的内容用<raw>标签包裹就行:

<raw>
<script>
if (userIsLoggedIn && hasEditPermission) {
  // 这里的&&会原样输出,不会被编码
}
</script>
</raw>

要启用这个扩展,只需要在MediaWiki的LocalSettings.php文件里添加一行代码:

wfLoadExtension( 'RawHTML' );

⚠️ 注意:这个扩展会关闭部分内容转义的安全机制,一定要只给可信的编辑者开放使用权限,防止恶意代码注入。

2. 自定义PHP钩子(适合开发者)

如果你懂点PHP,可以通过MediaWiki的钩子机制来拦截解析过程,强制保留&符号。比如在LocalSettings.php里添加这段自定义代码:

$wgHooks['ParserBeforeStrip'][] = function( $parser, &$text ) {
    // 用自定义占位符代替&,解析时再替换回来
    $text = str_replace( '[[RAW_AMP]]', '&', $text );
    return true;
};

之后你在页面里需要原生&的地方写[[RAW_AMP]]就行,解析后会自动变成未编码的&。这种方法更灵活,能精准控制哪些位置可以使用原生符号。

3. 借助Scribunto扩展用Lua输出(安全灵活的替代方案)

如果你的MediaWiki装了支持Lua脚本的Scribunto扩展,可以写个简单的Lua模块来输出原生&,绕过MediaWiki的转义:
先创建一个Lua模块(比如命名为RawAmp.lua):

local p = {}
function p.getRawAmp()
    return mw.html.create(''):wikitext('&')
end
return p

然后在页面里调用这个模块:

{{#invoke:RawAmp|getRawAmp}}

这样就能输出未被编码的&符号了,这个方法相对安全,不用开放高权限的HTML编辑权限。


内容的提问来源于stack exchange,提问作者user1258361

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:16:32