如何强制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
相关产品推荐
相关产品推荐

