模块:DecodeEncode/doc

来自决策链云智库
< 模块:DecodeEncode
Zeroclanzhang讨论 | 贡献2024年1月16日 (二) 15:37的版本 (创建页面,内容为“{{Module rating |general}} <!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see Wikipedia:Wikidata) --> {{High-use}} Implements Lua functions mw.text.decode, mw.text.encode in a module. :<code><nowiki>{{#invoke:decodeEncode|decode|s=Source&nbsp;text&copy;}}</nowiki></code…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

这是模块:DecodeEncode的文档页面

Implements Lua functions mw.text.decode, mw.text.encode in a module.

{{#invoke:decodeEncode|decode|s=Source&nbsp;text&copy;}}Source text©

See List of XML and HTML character entity references.

Decode (&copy; → ©)

Decodes Named Entities from entity name into a regular (unicode) character:
&copy;©
&gt;>

All well-defined named entities are decoded (HTML Named character references, formally: as defined in the PHP table).

A regular, rendered sentence:
"At 100 °F, & with a "burning" sun above, we , we ⁄walked⁄."
In code:
"At 100&nbsp;&deg;F, & with a &quot;burning&quot; sun above, we &frasl;walked&frasl;." -- wikitext
Processing:
{{#invoke:decodeEncode|decode|s=At 100 °F, & with a "burning" sun above, we ⁄walked⁄.}}
At 100 °F, & with a "burning" sun above, we ⁄walked⁄. -- In code: straight characters, no named entities.
Renders, again:
"At 100 °F, & with a "burning" sun above, we ⁄walked⁄."

Decode a reduced set only

By setting |subset_only=true, only these five entity names are decoded: '&lt;', '&gt;', '&amp;', '&quot;', '&nbsp;' (that is, into '<', '>', '&', '"', ' ').

Note: There is a difference with the relevant Lua parameter. (This only concerns your task if you also work directly with the Lua mw.text.decode function). Lua documentation defines parameter |decodeNamedEntities=, having this effect: when omitted or false, only the reduced set of entities is recognized and decoded. This use of 'false' is inverted in using |subset_only=: |decodeNamedEntities=false = |subset_only=true.
Also, this module ignores the "omitted" logic: |subset_only= should be set explicitly to 'true' to be effective.

Encode (© → &copy;)

Function encode encodes some entity-named characters into that name (for example: &&amp;).

Regular sentence:

"At >100 °F, & with a "burning" sun above, we walked. ©"

In code:

"At >100 °F, & with a "burning" sun above, we walked. ©"

Encode:

{{#invoke:decodeEncode|encode|s=At >100 °F, & with a "burning" sun above, we walked. ©|charset=&<>{{!}}°"'&©}}
At &gt;100 &#176;F, &amp; with a &quot;burning&quot; sun above, we walked. &#169;
Renders as:
"At >100 °F, & with a "burning" sun above, we walked. ©"

character set to encode

Per Lua documentation, only a small set of characters is processed. The characterset can be set (expanded) by using |charset=.

Example: |charset=<>" \'& (the default), |charset=<>°"'&©{{!}}; characters not in the default will be replaced by their decimal entity: ©&#169; (hexadecimal number, not decimal nor named &copy;)

Known issues

  • 13 Sep 2021: NOTE: The encode function with user-supplied charset is now used productively in {{R/superscript}} and {{R/ref}}. Before implementing breaking changes here, these templates need to be adjusted accordingly!
  • 26 Sep 2021: U+2009 THIN SPACE (&thinsp;, &ThinSpace;)
Note: Possible bug: Decoding &ThinSpace; works, but &thinsp; doesn't.
Resolved in code.
  • 4 Feb 2023: U+03B5 ε GREEK SMALL LETTER EPSILON (&epsi;, &epsilon;)
See Module talk:DecodeEncode § Bug report: bad decoding of U+03B5 ε (epsilon)
Resolved in code.

See also