Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Module:DecodeEncode

Permanently protected module
From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
Thismodule is rated asready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned onhelp pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed throughsandbox testing rather than repeated trial-and-error editing.
Page template-protectedThis module is currentlyprotected from editing.
See theprotection policy andprotection log for more details. Please discuss any changes on thetalk page; you maysubmit an edit request to ask anadministrator to make an edit if it isuncontroversial or supported byconsensus. You may alsorequest that this page be unprotected.
WarningThis Lua module is used onapproximately 143,000 pages.
To avoid major disruption and server load, any changes should be tested in the module's/sandbox or/testcases subpages, or in your ownmodule sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on thetalk page before implementing them.

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

{{#invoke:decodeEncode|decode|s=Source text©}}Source text©

SeeList of XML and HTML character entity references.

Decode (© → ©)

See§ Known issues for possible THIN SPACE, epsilon issues
DecodesNamed Entitiesfrom entity nameinto a regular (unicode) character:
©©
>>

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

A regular, rendered sentence:
"At 100 °F, & with a "burning" sun above, we , we ⁄walked⁄."
In code:
"At 100 °F, & with a "burning" sun above, we ⁄walked⁄." -- 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: whenomitted or false, only the reduced set of entities is recognized and decoded. This use of 'false' isinverted 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;)

Functionencode 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;)
SeeModule talk:DecodeEncode § Bug report: bad decoding of U+03B5 ε (epsilon)
Resolved in code.

See also

The abovedocumentation istranscluded fromModule:DecodeEncode/doc.(edit |history)
Editors can experiment in this module'ssandbox(edit |diff) and testcases(create) pages.
Subpages of this module.

require('strict')localp={}localfunction_getBoolean(boolean_str)-- from: module:String; adapted-- requires an explicit truelocalboolean_valueiftype(boolean_str)=='string'thenboolean_str=boolean_str:lower()ifboolean_str=='true'orboolean_str=='yes'orboolean_str=='1'thenboolean_value=trueelseboolean_value=falseendelseiftype(boolean_str)=='boolean'thenboolean_value=boolean_strelseboolean_value=falseendreturnboolean_valueendfunctionp.decode(frame)locals=frame.args['s']or''localsubset_only=_getBoolean(frame.args['subset_only']orfalse)returnp._decode(s,subset_only)endfunctionp._decode(s,subset_only)-- U+2009 THIN SPACE: workaround for bug: HTML entity &thinsp; is decoded incorrect. Entity &ThinSpace; gets decoded properlys=mw.ustring.gsub(s,'&thinsp;','&ThinSpace;')-- U+03B5 ε GREEK SMALL LETTER EPSILON: workaround for bug (phab:T328840): HTML entity &epsilon; is decoded incorrect for gsub(). Entity &epsi; gets decoded properlys=mw.ustring.gsub(s,'&epsilon;','&epsi;')localret=mw.text.decode(s,notsubset_only)returnretendfunctionp.encode(frame)locals=frame.args['s']or''localcharset=frame.args['charset']returnp._encode(s,charset)endfunctionp._encode(s,charset)-- example: charset = '_&©−°\\\"\'\=' -- do escape with backslash not %;localretifcharsetandcharset~=''thenret=mw.text.encode(s,charset)else-- use default: chartset = '<>&"\' ' (outer quotes = lua required; space = NBSP)ret=mw.text.encode(s)endreturnretendreturnp
Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:DecodeEncode&oldid=1150373543"
Categories:
Hidden category:

[8]ページ先頭

©2009-2026 Movatter.jp