Help:解析器函数:修订间差异

帮助页面
添加的内容 删除的内容
无编辑摘要
无编辑摘要
 

(未显示2个用户的12个中间版本)

第59行: 第59行:
右表依优先级列出了支持的运算符。运算结果的精度和格式受运行wiki服务器操作系统和站点语言的数字格式影响可能存在差异。
右表依优先级列出了支持的运算符。运算结果的精度和格式受运行wiki服务器操作系统和站点语言的数字格式影响可能存在差异。


使用[[wzh:布尔运算|布尔代数]]时,0表示<code>false</code>,其他任何非0数值(无论正负)均表示<code>true</code>:
使用[[布尔运算|布尔代数]]时,0表示<code>false</code>,其他任何非0数值(无论正负)均表示<code>true</code>:


:<syntaxhighlight lang="moin" inline>{{#expr: 1 and -1 }}</syntaxhighlight> → '''{{#expr: 1 and -1 }}'''
:<syntaxhighlight lang="moin" inline>{{#expr: 1 and -1 }}</syntaxhighlight> → '''{{#expr: 1 and -1 }}'''
第88行: 第88行:
{{Warning|1=运算符<code>mod</code>會對第二參數的某些值給出錯誤的结果:
{{Warning|1=运算符<code>mod</code>會對第二參數的某些值給出錯誤的结果:
<!-- the following line now produces the correct value:
<!-- the following line now produces the correct value:
:<syntaxhighlight lang="moin" inline>{{#expr: 123 mod (2^32-1)}}</syntaxhighlight> → '''{{#expr: 123 mod (2^32-1)}}''' (should be 123)<br />
:<syntaxhighlight lang="moin" inline>{{#expr: 123 mod (2^32-1)}}</syntaxhighlight> → '''{{#expr: 123 mod (2^32-1)}}''' (should be 123)<br>
but see this one: -->
but see this one: -->
:<syntaxhighlight lang="moin" inline>{{#expr: 123 mod (2^64-1)}}</syntaxhighlight> → {{#expr: 123 mod (2^64-1)}} (輸出一個空字符串;應該是123)<br />
:<syntaxhighlight lang="moin" inline>{{#expr: 123 mod (2^64-1)}}</syntaxhighlight> → {{#expr: 123 mod (2^64-1)}} (輸出一個空字符串;應該是123)<br>
<!-- and the following bug has now been solved, as shown on the linked bug report:
<!-- and the following bug has now been solved, as shown on the linked bug report:
Depending on the specification and configuration of the server running the wiki, there may also be other errors:
Depending on the specification and configuration of the server running the wiki, there may also be other errors:
第148行: 第148行:
| <code style="white-space:nowrap;"><nowiki>{{#expr:</nowiki> '''floor('''-1/3''')''' }}</code> || {{#expr: floor(-1/3) }} || 向下取整至-1
| <code style="white-space:nowrap;"><nowiki>{{#expr:</nowiki> '''floor('''-1/3''')''' }}</code> || {{#expr: floor(-1/3) }} || 向下取整至-1
|-
|-
| <code style="white-space:nowrap;"><nowiki>{{#expr:</nowiki> '''ceil''' 1/3 }}</code> || {{#expr: ceil 1/3 }} || 没有取整,因为1本来就是整数<br />{{Warning|1=注意会被解析为'''(ceil''' 1''')'''/3,而不是你想象中的'''ceil('''1/3''')'''}}
| <code style="white-space:nowrap;"><nowiki>{{#expr:</nowiki> '''ceil''' 1/3 }}</code> || {{#expr: ceil 1/3 }} || 没有取整,因为1本来就是整数<br>{{Warning|1=注意会被解析为'''(ceil''' 1''')'''/3,而不是你想象中的'''ceil('''1/3''')'''}}
|}
|}


第172行: 第172行:
:<syntaxhighlight lang="moin" inline>{{#if: string | yes | no}}</syntaxhighlight> → '''{{#if: string | yes | no}}'''
:<syntaxhighlight lang="moin" inline>{{#if: string | yes | no}}</syntaxhighlight> → '''{{#if: string | yes | no}}'''
:<code><nowiki>{{#if: &nbsp;&nbsp;&nbsp;&nbsp; | yes | no}}</nowiki></code> → '''{{#if: | yes | no}}'''
:<code><nowiki>{{#if: &nbsp;&nbsp;&nbsp;&nbsp; | yes | no}}</nowiki></code> → '''{{#if: | yes | no}}'''
:<code><nowiki>{{#if: </nowiki><br /><br /><br /><nowiki> | yes | no}}</nowiki></code> → '''{{#if:
:<code><nowiki>{{#if: </nowiki><br><br><br><nowiki> | yes | no}}</nowiki></code> → '''{{#if:


| yes | no}}'''
| yes | no}}'''
第204行: 第204行:
}}
}}


参见{{ll|Help:Parser functions in templates}}以了解更多关于解析器函数中变量的相关例子。
参见[[mw:Help:Parser functions in templates]]以了解更多关于解析器函数中变量的相关例子。


{{Anchor|ifeq|IFEQ|Ifeq|IfEq|If equal}}
{{Anchor|ifeq|IFEQ|Ifeq|IfEq|If equal}}
第244行: 第244行:
:<code><nowiki>{{#ifeq: &lt;nowiki>foo&lt;/nowiki> | &lt;nowiki>foo&lt;/nowiki> | equal | not equal}}</nowiki></code> → '''{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | equal | not equal}} '''
:<code><nowiki>{{#ifeq: &lt;nowiki>foo&lt;/nowiki> | &lt;nowiki>foo&lt;/nowiki> | equal | not equal}}</nowiki></code> → '''{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | equal | not equal}} '''
:<code><nowiki>{{#ifeq: &lt;math>foo&lt;/math> | &lt;math>foo&lt;/math> | equal | not equal}}</nowiki></code> → '''{{#ifeq: <math>foo</math> | <math>foo</math> | equal | not equal}} '''
:<code><nowiki>{{#ifeq: &lt;math>foo&lt;/math> | &lt;math>foo&lt;/math> | equal | not equal}}</nowiki></code> → '''{{#ifeq: <math>foo</math> | <math>foo</math> | equal | not equal}} '''
:<code><nowiki>{{#ifeq: {{</nowiki>[[Help:Magic words#Miscellaneous|#tag:]]<nowiki>math|foo}} | {{#tag:math|foo}} | equal | not equal}}</nowiki></code> → '''{{#ifeq: {{#tag:math|foo}} | {{#tag:math|foo}} | equal | not equal}} '''
:<code><nowiki>{{#ifeq: {{</nowiki>#tag:<nowiki>math|foo}} | {{#tag:math|foo}} | equal | not equal}}</nowiki></code> → '''{{#ifeq: {{#tag:math|foo}} | {{#tag:math|foo}} | equal | not equal}} '''
:<syntaxhighlight lang="moin" inline>{{#ifeq: [[foo]] | [[foo]] | equal | not equal}}</syntaxhighlight> → '''{{#ifeq: [[foo]] | [[foo]] | equal | not equal}} '''
:<syntaxhighlight lang="moin" inline>{{#ifeq: [[foo]] | [[foo]] | equal | not equal}}</syntaxhighlight> → '''{{#ifeq: [[foo]] | [[foo]] | equal | not equal}} '''


第327行: 第327行:


对于不同的数字,结果实际上是不正确的。
对于不同的数字,结果实际上是不正确的。
造成<code>[[##ifexpr|#ifexpr]]</code>出错行为的原因是MediaWiki将两个数依字面表达理解成了浮点数,而对于像这样的大数,转换为浮点数由于精度误差会存储为一样的数值,导致出错。<br /><br />
造成<code>[[##ifexpr|#ifexpr]]</code>出错行为的原因是MediaWiki将两个数依字面表达理解成了浮点数,而对于像这样的大数,转换为浮点数由于精度误差会存储为一样的数值,导致出错。<br><br>
}}
}}


第359行: 第359行:
如果文件有一个已创建的对应的本地描述页面,上面的结果将全部是'''exists'''。
如果文件有一个已创建的对应的本地描述页面,上面的结果将全部是'''exists'''。


<code>#ifexist:</code>不会对跨wiki链接起作用。
<code>#ifexist:</code>不会对跨链接起作用。


<span id="ifexist_limits"></span>
<span id="ifexist_limits"></span>
第487行: 第487行:
在本例中,不必将管道符放在参数名称后面,因为你不太可能需要选择字符串“<code><nowiki>{{{</nowiki>''parameter name''<nowiki>}}}</nowiki></code>”作为样例。
在本例中,不必将管道符放在参数名称后面,因为你不太可能需要选择字符串“<code><nowiki>{{{</nowiki>''parameter name''<nowiki>}}}</nowiki></code>”作为样例。
((如果没有管道符,且参数不存在或没有值,则参数就会显示为这样。)
((如果没有管道符,且参数不存在或没有值,则参数就会显示为这样。)
参见{{ll|Help:Parser functions in templates}}。)
参见[[mw:Help:Parser functions in templates|Help:Parser functions in templates]]。)


:<syntaxhighlight lang="moin" inline>{{#switch: {{{1}}} | foo = Foo | baz = Baz | Bar }}</syntaxhighlight>
:<syntaxhighlight lang="moin" inline>{{#switch: {{{1}}} | foo = Foo | baz = Baz | Bar }}</syntaxhighlight>
第629行: 第629行:
{{Anchor|time|TIME}}
{{Anchor|time|TIME}}
== #time ==
== #time ==
{| class="wikitable plainlinks" style="float: right; font-size: 90%; line-height: normal; margin-{{dir|{{pagelang}}|right|left}}: 1em; width: 40%;"
{| class="wikitable plainlinks" style="float: right; font-size: 90%; line-height: normal; margin-{{dir|{{pagelang}}|right|left}}: 1em; "
|-
|-
! 代码
! 代码
! 描述
! 描述
! 当前输出<br /><small class="noprint">([{{fullurl:Help:Extension:ParserFunctions{{#translation:}}|action=purge}} 刷新此页面的缓存]以更新)</small>
! 当前输出<br><small class="noprint">([{{fullurl:Help:解析器函数|action=purge}} 刷新此页面的缓存]以更新)</small>
|-
|-
! colspan="3"| 年
! colspan="3"| 年
第675行: 第675行:
| style="text-align: center;" | <code>xg</code>
| style="text-align: center;" | <code>xg</code>
| 不同于[[主格|主格]]形式,以[[所有格|所有格]]形式返回月份名的全称。这个代码适用大多数的[[斯拉夫语言|斯拉夫语言]],比如波兰语、俄语、白俄罗斯语、捷克语、斯洛伐克语、斯洛文尼亚语、乌克兰语等。
| 不同于[[主格|主格]]形式,以[[所有格|所有格]]形式返回月份名的全称。这个代码适用大多数的[[斯拉夫语言|斯拉夫语言]],比如波兰语、俄语、白俄罗斯语、捷克语、斯洛伐克语、斯洛文尼亚语、乌克兰语等。
| style="line-height: 1.6;" | 波兰语:<br /><code style="font-size: 85%;"><nowiki>{{#time:F Y|June 2010|pl}}</nowiki></code> → {{#time:F Y|June 2010|pl}}<br />(主格)<br /><code style="font-size: 85%;"><nowiki>{{#time:d xg Y|20 June 2010|pl}}</nowiki></code> → {{#time:d xg Y|20 June 2010|pl}}<br />(所有格)
| style="line-height: 1.6;" | 波兰语:<br><code style="font-size: 85%;"><nowiki>{{#time:F Y|June 2010|pl}}</nowiki></code> → {{#time:F Y|June 2010|pl}}<br>(主格)<br><code style="font-size: 85%;"><nowiki>{{#time:d xg Y|20 June 2010|pl}}</nowiki></code> → {{#time:d xg Y|20 June 2010|pl}}<br>(所有格)
|-
|-
! colspan="3"| 一年或一个月内的第几天
! colspan="3"| 一年或一个月内的第几天
第688行: 第688行:
|-
|-
| style="text-align: center;" | <code>z</code>
| style="text-align: center;" | <code>z</code>
| 年内的第几天(一月一日视为第0天)。<br />{{note}}要获得ISO日期值请在此数基础上加1。
| 年内的第几天(一月一日视为第0天)。<br>{{memo|要获得ISO日期值请在此数基础上加1。}}
| style="text-align: center;" | {{#time:z}}
| style="text-align: center;" | {{#time:z}}
|-
|-
第790行: 第790行:
|-
|-
| style="text-align: center;" | <code>r</code>
| style="text-align: center;" | <code>r</code>
| [[rfc5322|RFC 5332]]规范化的日期。与<syntaxhighlight lang="moin" inline>D, j M Y H:i:s +0000</syntaxhighlight>等价,但周名和月名可能不是国际化表述。
| [[rfc:5322|RFC 5332]]规范化的日期。与<syntaxhighlight lang="moin" inline>D, j M Y H:i:s +0000</syntaxhighlight>等价,但周名和月名可能不是国际化表述。
| style="font-size: 75%;" | {{#time:r}}
| style="font-size: 75%;" | {{#time:r}}
|-
|-
! colspan="3" | 非公历(格里历)历法
! colspan="3" | 非公历(格里历)历法
|-
|-
! {{hl3}} colspan="3" | 伊斯兰教历法
! colspan="3" | 伊斯兰教历法
|-
|-
| style="text-align: center;" | <code>xmj</code>
| style="text-align: center;" | <code>xmj</code>
第813行: 第813行:
| {{#time:xmY}}
| {{#time:xmY}}
|-
|-
! {{hl3}} colspan="3" | 伊朗历法(Jalaly)
! colspan="3" | 伊朗历法(Jalaly)
|-
|-
| style="text-align: center;" | <code>xit</code>
| style="text-align: center;" | <code>xit</code>
第843行: 第843行:
| {{#time:xiy}}
| {{#time:xiy}}
|-
|-
! {{hl3}} colspan="3" | 希伯来历法
! colspan="3" | 希伯来历法
|-
|-
| style="text-align: center;" | <code>xjj</code>
| style="text-align: center;" | <code>xjj</code>
第869行: 第869行:
| {{#time:xjY}}
| {{#time:xjY}}
|-
|-
! {{hl3}} colspan="3" | 泰历
! colspan="3" | 泰历
|-
|-
| style="text-align: center;" | <code>xkY</code>
| style="text-align: center;" | <code>xkY</code>
| 泰太阳历中的年份. <br />{{note}}1941年前后,本条目可能与依泰历的真实计算方式出的年份有变化.
| 泰太阳历中的年份. <br>{{memo|1941年前后,本条目可能与依泰历的真实计算方式出的年份有变化.}}
| {{#time:xkY}}
| {{#time:xkY}}
|-
|-
! {{hl3}} colspan="3" | 民国历/主体历
! colspan="3" | 民国历/主体历
|-
|-
| style="text-align: center;" | <code>xoY</code>
| style="text-align: center;" | <code>xoY</code>
第881行: 第881行:
| {{#time:xoY}}
| {{#time:xoY}}
|-
|-
! {{hl3}} colspan="3" | 日本历法
! colspan="3" | 日本历法
|-
|-
| style="text-align: center;" | <code>xtY</code>
| style="text-align: center;" | <code>xtY</code>
第897行: 第897行:
|-
|-
| style="text-align: center;" | <code>xr</code>
| style="text-align: center;" | <code>xr</code>
| 将下一个数字格式化为罗马数字。仅适用于10000以内的数字<br /><small>(MediaWiki 1.20之前的版本为3000以内)</small>
| 将下一个数字格式化为罗马数字。仅适用于10000以内的数字<br><small>(MediaWiki 1.20之前的版本为3000以内)</small>
| <syntaxhighlight lang="moin" inline>{{#time:xrY}}</syntaxhighlight> → {{#time:xrY}}
| <syntaxhighlight lang="moin" inline>{{#time:xrY}}</syntaxhighlight> → {{#time:xrY}}
|-
|-
第949行: 第949行:
这是一个布尔参数,其值是通过转换(casting)参数值来确定的(有关如何将字符串转换为布尔值的详细信息,请参阅[https://php.net/language.types.boolean#language.types.boolean.casting 官方PHP文档])。
这是一个布尔参数,其值是通过转换(casting)参数值来确定的(有关如何将字符串转换为布尔值的详细信息,请参阅[https://php.net/language.types.boolean#language.types.boolean.casting 官方PHP文档])。


{{note|2=reminder|1=请注意,如果{{phpi|$wgLocaltimezone}}设为<code>UTC</code>,则当<code>local</code>设为<code>true</code>或<code>false</code>时输出无区别。}}
{{memo|2=reminder|1=请注意,如果{{phpi|$wgLocaltimezone}}设为<code>UTC</code>,则当<code>local</code>设为<code>true</code>或<code>false</code>时输出无区别。}}


参考下面的详细示例:
参考下面的详细示例:
第991行: 第991行:
可接受的范围为0111年1月1日(1 January 0111)到9999年12月31日(31 December 9999)。对于年份100到110,输出不连贯,Y和闰年类似于年份100-110,而r、D、I和U可能会将这些年份解释为2000-2010。
可接受的范围为0111年1月1日(1 January 0111)到9999年12月31日(31 December 9999)。对于年份100到110,输出不连贯,Y和闰年类似于年份100-110,而r、D、I和U可能会将这些年份解释为2000-2010。


:<syntaxhighlight lang="moin" inline>{{#time: d F Y | 29 Feb 0100 }}</syntaxhighlight> → '''{{#time: d F Y | 29 Feb 0100 }}'''<br /> (正確,沒有閏年),但是
:<syntaxhighlight lang="moin" inline>{{#time: d F Y | 29 Feb 0100 }}</syntaxhighlight> → '''{{#time: d F Y | 29 Feb 0100 }}'''<br> (正確,沒有閏年),但是
:<syntaxhighlight lang="moin" inline>{{#time: r | 29 Feb 0100 }}</syntaxhighlight> → '''{{#time: r | 29 Feb 0100 }}''' (錯誤,即使100也被解讀為2000,因为那是閏年)
:<syntaxhighlight lang="moin" inline>{{#time: r | 29 Feb 0100 }}</syntaxhighlight> → '''{{#time: r | 29 Feb 0100 }}''' (錯誤,即使100也被解讀為2000,因为那是閏年)
:<syntaxhighlight lang="moin" inline>{{#time: d F Y | 15 April 10000 }}</syntaxhighlight> → '''{{#time: d F Y | 15 April 10000 }}'''
:<syntaxhighlight lang="moin" inline>{{#time: d F Y | 15 April 10000 }}</syntaxhighlight> → '''{{#time: d F Y | 15 April 10000 }}'''
第1,067行: 第1,067行:
:<code><nowiki>{{#timel:</nowiki> ''format string'' <nowiki>|</nowiki> ''date/time object'' <nowiki>|</nowiki> ''language code'' <nowiki>}}</nowiki></code>
:<code><nowiki>{{#timel:</nowiki> ''format string'' <nowiki>|</nowiki> ''date/time object'' <nowiki>|</nowiki> ''language code'' <nowiki>}}</nowiki></code>


{{note|2=reminder|1=请注意,如果变量{{phpi|$wgLocaltimezone}}设为<code>UTC</code>,则当<code>local</code>设为<code>true</code>或<code>false</code>时输出无区别。}}
{{memo|2=reminder|1=请注意,如果变量{{phpi|$wgLocaltimezone}}设为<code>UTC</code>,则当<code>local</code>设为<code>true</code>或<code>false</code>时输出无区别。}}


[[File:Time-Timel.png|thumb|使用#time和#timel解析器函数的示例,其中服务器处于非UTC时区]]
[[File:Time-Timel.png|thumb|使用#time和#timel解析器函数的示例,其中服务器处于非UTC时区]]
第1,096行: 第1,096行:
== #titleparts ==
== #titleparts ==
此函数将页面标题根据斜杠划分成多个分段,然后输出返回这些分段中的部分。
此函数将页面标题根据斜杠划分成多个分段,然后输出返回这些分段中的部分。

: {{tmpl|0=<code class="mw-highlight">{{((}}#titleparts: ''$1'' {{!}} ''$2'' {{!}} ''$3'' {{))}}</code>
: {{tmpl|0=<code class="mw-highlight">{{((}}#titleparts: ''$1'' {{!}} ''$2'' {{!}} ''$3'' {{))}}</code>
|1=页面名称
|1=页面名称
第1,126行: 第1,125行:
: 不会执行从HTML到纯文本的其他转换,因此即使HTML标签在页面标题中无效,在此初始步骤中也会保持不变。
: 不会执行从HTML到纯文本的其他转换,因此即使HTML标签在页面标题中无效,在此初始步骤中也会保持不变。


{{demo-inline| 1=
{{mbox| text=
MediaWiki的一些魔术字或解析器函数(例如<code><nowiki>{{</nowiki>PAGENAME<nowiki>}}</nowiki></code>和类似)会返回用多余的HTML编码的字符串,即使其自身的输入参数不是HTML编码的:
MediaWiki的一些魔术字或解析器函数(例如<code><nowiki>{{</nowiki>PAGENAME<nowiki>}}</nowiki></code>和类似)会返回用多余的HTML编码的字符串,即使其自身的输入参数不是HTML编码的:


第1,200行: 第1,199行:


<span id="StringFunctions"></span>
<span id="StringFunctions"></span>

== 字符串函数 ==
== 字符串函数 ==


所有这些函数(<code>len</code>, <code>pos</code>, <code>rpos</code>, <code>sub</code>, <code>replace</code>, <code>explode</code>)都[[Special:Code/MediaWiki/50997|融合]]在了StringFunctions扩展中,但是只有在管理员在<code>LocalSettings.php</code>中启用了<syntaxhighlight lang=php inline>$wgPFEnableStringFunctions = true;</syntaxhighlight>的情况下才能使用。
所有这些函数(<code>len</code>, <code>pos</code>, <code>rpos</code>, <code>sub</code>, <code>replace</code>, <code>explode</code>)都[[mw:Special:Code/MediaWiki/50997|融合]]在了StringFunctions扩展中,但是只有在管理员在<code>LocalSettings.php</code>中启用了<syntaxhighlight lang=php inline>$wgPFEnableStringFunctions = true;</syntaxhighlight>的情况下才能使用。


所有这些函数都以[[大O符号|O(n)]]的时间复杂度运行,使其能够抵御[[DoS|DoS]]攻击。
所有这些函数都以[[大O符号|O(n)]]的时间复杂度运行,使其能够抵御[[DoS|DoS]]攻击。


{{note|1=<nowiki/>
{{memo|1=<nowiki/>
# 这些函数的部分参数通过全局设置进行限制,以防止滥用。 参见后面的[[#Limits|限制]]段落。
# 这些函数的部分参数通过全局设置进行限制,以防止滥用。 参见后面的[[#Limits|限制]]段落。
# 对于区分大小写的函数,在某些情况下,可以使用[[Special:MyLanguage/Help:Magic words|魔术字]]<code><nowiki>{{</nowiki>lc:''string''<nowiki>}}</nowiki></code>来解决。
# 对于区分大小写的函数,在某些情况下,可以使用[[Special:MyLanguage/Help:Magic words|魔术字]]<code><nowiki>{{</nowiki>lc:''string''<nowiki>}}</nowiki></code>来解决。
第1,215行: 第1,215行:
=== #len ===
=== #len ===


{{Note|1=<code>#len</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}
{{memo|1=<code>#len</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}


<nowiki/>#len函数返回指定字符串的长度。
<nowiki/>#len函数返回指定字符串的长度。
第1,225行: 第1,225行:
如果未指定字符串,则返回值为零。
如果未指定字符串,则返回值为零。


{{note|1=<nowiki/>
{{memo|1=<nowiki/>
* 此函数可安全处理UTF-8多字节字符。 例如:
* 此函数可安全处理UTF-8多字节字符。 例如:
** <code>{{#len:Žmržlina}}</code> → <code>8</code>
** <code>{{#len:Žmržlina}}</code> → <code>8</code>
第1,240行: 第1,240行:
=== #pos ===
=== #pos ===


{{Note|1=<code>#pos</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}
{{memo|1=<code>#pos</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}


<nowiki/>#pos函数返回给定搜索词在字符串中的位置。
<nowiki/>#pos函数返回给定搜索词在字符串中的位置。
第1,253行: 第1,253行:
如果没有找到''搜索词'',函数返回空字符串。
如果没有找到''搜索词'',函数返回空字符串。


{{note|1=<nowiki/>
{{memo|1=<nowiki/>
* 该函数是大小写敏感的。
* 该函数是大小写敏感的。
* ''搜索词''允许的最大长度限制取决于全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]。
* ''搜索词''允许的最大长度限制取决于全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]。
第1,262行: 第1,262行:
=== #rpos ===
=== #rpos ===


{{Note|1=<code>#rpos</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}
{{memo|1=<code>#rpos</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}


<nowiki />#rpos函数返回给定搜索词在字符串中的最后位置。
<nowiki />#rpos函数返回给定搜索词在字符串中的最后位置。
第1,275行: 第1,275行:
{{demo-inline|1=使用该函数搜索最后一个分隔符时,给结果添加+1以检索最后一个分隔符之后的位置。 这在找不到分隔符时也有效,因为“-1 + 1”为零,也就是指定值的开头。}}
{{demo-inline|1=使用该函数搜索最后一个分隔符时,给结果添加+1以检索最后一个分隔符之后的位置。 这在找不到分隔符时也有效,因为“-1 + 1”为零,也就是指定值的开头。}}


{{note|1=<nowiki/>
{{memo|1=<nowiki/>
* 该函数是大小写敏感的。
* 该函数是大小写敏感的。
* ''搜索词''允许的最大长度限制取决于全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]。
* ''搜索词''允许的最大长度限制取决于全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]。
第1,284行: 第1,284行:
=== #sub ===
=== #sub ===


{{Note|1=<code>#sub</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}
{{memo|1=<code>#sub</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}


<nowiki/>#sub函数返回指定字符串中的子字符串(substring)。
<nowiki/>#sub函数返回指定字符串中的子字符串(substring)。
第1,319行: 第1,319行:
<code><nowiki>{{#sub:Icecream|-3|2}}</nowiki></code>返回<code>ea</code>。
<code><nowiki>{{#sub:Icecream|-3|2}}</nowiki></code>返回<code>ea</code>。


{{note|1=<nowiki/>
{{memo|1=<nowiki/>
* 如果''length''参数为零,则完全不会用于截断。
* 如果''length''参数为零,则完全不会用于截断。
** 例如: <code><nowiki>{{#sub:Icecream|3|0}}</nowiki></code>返回<code>cream</code>。 <code><nowiki>{{#sub:Icecream|0|3}}</nowiki></code>返回<code>Ice</code>。
** 例如: <code><nowiki>{{#sub:Icecream|3|0}}</nowiki></code>返回<code>cream</code>。 <code><nowiki>{{#sub:Icecream|0|3}}</nowiki></code>返回<code>Ice</code>。
第1,330行: 第1,330行:
=== #count ===
=== #count ===


{{Note|1=<nowiki/><code>#count</code>解析器函数是在1.2.0版本添加到nsp=0扩展中的。}}
{{memo|1=<nowiki/><code>#count</code>解析器函数是在1.2.0版本添加到nsp=0扩展中的。}}


<nowiki/>#count函数返回指定子字符串在提供的文本中出现的次数。
<nowiki/>#count函数返回指定子字符串在提供的文本中出现的次数。
第1,338行: 第1,338行:
=== #replace ===
=== #replace ===


{{Note|1=<code>#replace</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}
{{memo|1=<code>#replace</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}


<nowiki/>#replace函数返回指定的字符串,并将所有搜索词出现的地方替换成替换词。
<nowiki/>#replace函数返回指定的字符串,并将所有搜索词出现的地方替换成替换词。
第1,348行: 第1,348行:
如果''replacement term''未指定或者为空,则所有''search term''都会从''string''中移除。
如果''replacement term''未指定或者为空,则所有''search term''都会从''string''中移除。


{{note|1=<nowiki/>
{{memo|1=<nowiki/>
* 该函数是大小写敏感的。
* 该函数是大小写敏感的。
* ''search term''允许的最大长度限制取决于全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]。
* ''search term''允许的最大长度限制取决于全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]。
第1,357行: 第1,357行:
** 注意在替换词中'''''这是唯一可以使用nowiki的地方'''''',因为其他的nowiki都会被用来绕过[[#$wgStringFunctionsLimitReplace|$wgStringFunctionsLimitReplace]],将任意大量的字符串注入到输出中。 因此,在替换词中所有出现{{tag|nowiki|open}}或其他标签扩展的地方都会替换为空格。
** 注意在替换词中'''''这是唯一可以使用nowiki的地方'''''',因为其他的nowiki都会被用来绕过[[#$wgStringFunctionsLimitReplace|$wgStringFunctionsLimitReplace]],将任意大量的字符串注入到输出中。 因此,在替换词中所有出现{{tag|nowiki|open}}或其他标签扩展的地方都会替换为空格。
* 此函数可安全处理UTF-8多字节字符。 例如: <code><nowiki>{{#replace:Žmržlina|ž|z}}</nowiki></code>返回<code>Žmrzlina</code>。
* 此函数可安全处理UTF-8多字节字符。 例如: <code><nowiki>{{#replace:Žmržlina|ž|z}}</nowiki></code>返回<code>Žmrzlina</code>。
* 如果单个文本字符串中的多个项都要替换,可以考虑{{ll|Extension:ReplaceSet}}。 该扩展会添加一个空余替换序列的解析器函数。
* 如果单个文本字符串中的多个项都要替换,可以考虑[[mw:Extension:ReplaceSet|Extension:ReplaceSet]]。 该扩展会添加一个空余替换序列的解析器函数。
}}
}}


第1,373行: 第1,373行:
=== #explode ===
=== #explode ===


{{Note|1=<code>#explode</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}
{{memo|1=<code>#explode</code>解析器函数是在1.2.0版本从nsp=0扩展合并的。}}


<nowiki/>#explode函数将指定的字符串分成多个片段,返回其中一段。
<nowiki/>#explode函数将指定的字符串分成多个片段,返回其中一段。
第1,399行: 第1,399行:
返回的值是第''position''个片段。如果片段数量少于''position''指定的,则返回空字符串。
返回的值是第''position''个片段。如果片段数量少于''position''指定的,则返回空字符串。


{{note|1=<nowiki/>
{{memo|1=<nowiki/>
* 该函数是大小写敏感的。
* 该函数是大小写敏感的。
* ''delimiter''允许的最大长度限制由全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]指定。
* ''delimiter''允许的最大长度限制由全局设置[[#$wgStringFunctionsLimitSearch|$wgStringFunctionsLimitSearch]]指定。
第1,428行: 第1,428行:
这些用于限制一些函数的部分参数以确保函数在O(n)时间复杂度内运行,因此可避免[[Dos|Dos]]攻击,确保安全。
这些用于限制一些函数的部分参数以确保函数在O(n)时间复杂度内运行,因此可避免[[Dos|Dos]]攻击,确保安全。


==== $wgStringFunctionsLimitSearch ====
==== $wgString<wbr>FunctionsLimitSearch ====


[[##pos|#pos]]、[[##rpos|#rpos]]、[[##replace|#replace]]、[[##explode|#explode]]都使用了此设置。所有这些函数在运行时都会在更大的字符串中搜索子字符串,这可以在O(n*m)内运行,因此使软件更容易受到[[DoS|DoS]]攻击。将此值设置为特定的更小的数,可将时间复杂度降低到O(n)。
[[##pos|#pos]]、[[##rpos|#rpos]]、[[##replace|#replace]]、[[##explode|#explode]]都使用了此设置。所有这些函数在运行时都会在更大的字符串中搜索子字符串,这可以在O(n*m)内运行,因此使软件更容易受到[[DoS|DoS]]攻击。将此值设置为特定的更小的数,可将时间复杂度降低到O(n)。
第1,443行: 第1,443行:


<span id="General_points"></span>
<span id="General_points"></span>

== 一般帮助 ==
== 一般帮助 ==