Příručka:Kódování PAGENAMEE
Kódování názvů stránek MediaWiki je složité téma. Magická slova MediaWiki PAGENAME, PAGENAMEE, urlencode mají odlišné implementace, z nichž každé má své vlastní zvláštnosti.
Název stránky MediaWiki může mít mezeru na začátku, ale ne na konci. Znaky ASCII, které nejsou povoleny v názvech stránek MediaWiki, jsou tři typy závorek, ostré znaménko, podtržítko a svislý pruh a všechny řídicí znaky (včetně tabulátorů a nových řádků).
#
<
>
[
]
_
{
|
}
V tomto článku se na ně odkazuje jako na "nepovolené znaky názvu stránky". Pro srozumitelnost uvedeme další 7bitové hodnoty ASCII pro znaky jako kódování ve stylu URL ve tvaru procent-hex-hex známé jako procentuální kódování.
PAGENAME
Některé povolené znaky vrácené {{PAGENAME}}
jsou kódovány ve stylu HTML:
"
(dvojité uvozovky%22
) se převede na"
(34 je desetinná hodnota šestnáctkové soustavy 22). Ve standardním HTML/XML stylu by to mohlo být také převedeno na"
.&
(ampersand%26
) se převede na&
(38 je dekadická hodnota šestnáctkové soustavy 26). Ve standardním HTML/XML stylu by to mohlo být také převedeno na&
'
(jednoduchá uvozovka%27
) se převede na'
(39 je desetinná hodnota šestnáctkové soustavy 27). Ve standardním HTML/XML stylu by to mohlo být také převedeno na'
- In recent versions of MediaWiki,
-
is converted to-
if it is the first character of the string. See phab:T358338 for more details.
- Toto kódování HTML/XML je standardní, i když standard kromě několika málo případů vždy vyžaduje escapování jednoduchých a dvojitých uvozovek. Standard by také vyžadoval překódování znaků nižší než (
<
) a větší než (>
), ale tyto dva znaky jsou v názvech stránek MediaWiki zakázány kvůli syntaxi kódu MediaWiki používaného k vytváření stránek.
Stejné kódování HTML se používá také u:
{{FULLPAGENAME}}
{{BASEPAGENAME}}
{{SUBPAGENAME}}
{{SUBJECTPAGENAME}}
{{TALKPAGENAME}}
Budeme je označovat jako "tři speciální znaky názvu stránky".
PAGENAMEE
{{PAGENAMEE}}
převede mezery na podtržítko a zakóduje sadu znaků v procentech:
- Převádí 11 následujících znaků ASCII (všechny povoleny v názvech stránek):
"
%
&
'
+
=
?
\
^
`
~
- na (pomocí hexadecimální reprezentace kódování ASCII)
%22
%25
%26
%27
%2B
%3D
%3F
%5C
%5E
%60
%7E
- Převádí také všechny znaky, které nejsou ASCII (Unicode) a také trojice
%nn
s nn v hexadecimální soustavě (jeden pro každý oktet sekvence UTF-8 kódující bod kódu Unicode spojený se znakem), první trojice je mezi%C2
a%FD
, následuje o jednu až tři trojice mezi%80
a%BF
(v nejhorším případě by to mohlo vygenerovat 12 znaků z jednoho znaku Unicode, většina latinských, cyrilických a řeckých znaků je zakódována do 6 znaků, ale sinogramy a korejský Hangul potřebuje 9 na 6 znaků).
- Převede mezeru ASCII (
_
). - Nepřevádí ASCII alfanumerické znaky a 13 následujících ASCII interpunkčních znamének a symbolů (vše povoleno v názvech stránek):
!
$
(
)
*
,
.
/
:
;
@
_
- In recent versions of MediaWiki,
-
is converted to-
if it is the first character of the string. See phab:T358338 for more details.
Stejné kódování se používá také s:
{{FULLPAGENAMEE}}
{{BASEPAGENAMEE}}
{{SUBPAGENAMEE}}
{{SUBJECTPAGENAMEE}}
{{TALKPAGENAMEE}}
Při přípravě názvu stránky pro vložení do "searchpart" (vyhledávací část) adresy URL (viz RFC 1738 a nebo RFC 3986) může být nutné, aby byl zakódován v procentech a všechny znaky mezery převedeny na %20
nebo znaménko plus +
, které budeme nazývat "zakódované podle vyhledávací části".
- Tím se vyhnete problematickému kódování tří speciálních znaků názvu stránky kódováním například ampersand (
&
) jako%26
, ale typickým kódováním mezer ve vyhledávací části je znaménko plus (nebo někdy jako%20
).
Pokud neexistují žádná rozšíření pro manipulaci s řetězci MediaWiki, pak {{PAGENAMEE}}
může být užitečné pouze pro vytvoření adresy URL zpět do vlastní wiki, na jiné wikiny nebo na jiné weby, kde stránka, kterou poskytují, používá stejný název a používá podtržítka (neexistuje zde žádný standard, výše uvedené kódování bylo definováno samotnou MediaWiki pro vlastní místní použití.
Nepředpokládejte, že stejnou konverzi provedou i jiné weby, většina z nich pouze používá prosté UTF-8 ve svých vlastních místních adresách URL, pokud potřebují reprezentovat jiné než ASCII znaky a standardní kódování URL pro "nebezpečné" znaky ASCII).
urlencode
Funkce {{urlencode:data|style}}
(ve své aktuální verzi nyní od MediaWiki 1.17 standardně používá styl "QUERY
") kóduje procentně mnohem více znaků než PAGENAMEE.
- Dokáže převést jakýkoli platný vstupní řetězec ze svého nativního kódování UTF-8.
- Tato funkce také převede 9 znaků, které jsou zakázány v názvech stránek a jsou uvedeny v horní části stránky.
- Převádí "tři speciální znaky" jinak než to, co provádí
{{PAGENAME}}
, pomocí%nn
hexadecimálních trojic namísto HTML entit. - Zachovává rozdíl mezi mezerou a podtržítkem (rozdíl ztracený pouze v názvech stránek MediaWiki).
- Výsledek odpovídá standardu kódování URL RFC 1738, používá pouze písmena, číslice a "bezpečné" znaky a dva znaky
%
(následované dvěma hexadecimálními číslicemi) a+
(pro kódování mezer). - Tento výsledek je plně a snadno reverzibilní, ale MediaWiki nativně nenabízí funkci
urldecode
, která to udělá.
Lze jej také použít k tomu, aby editor Wikisource mohl pracovat s vícejazyčnými znaky, na které jsou zvyklí, místo aby se zabýval více neprůhlednými znaky s procentuálním kódováním.
Při zvažování použití urlencode
k vytvoření adresy URL externího odkazu, zejména v rámci šablony, existují dva styly designu, kde by to mohlo být vhodné.
Který z nich je vhodný, je otázkou kompromisů mezi obecností a snadností použití.
- Pro maximální obecnost neexistuje žádná jednoduchá kombinace
PAGENAME
a dalších výchozích kouzelných slov wiki, která by poskytla obecné řešení a zvládla názvy, které obsahují všechny možné znaky v názvech stránek. Problémy představují nepovolené znaky názvu stránky a tři speciální znaky názvu stránky. Pokud požadovaný název používá některý z těchto znaků, pak by skutečný název stránky musel být jiný. Nejobecnějším návrhem šablony by byla šablona se dvěma parametry: Parametrem zakódovaným ve stylu URL pro odkaz URL a parametrem ve stylu HTML pro štítek odkazu. Parametr stylu URL by byl přidán do vyhledávací nebo vyhledávací adresy URL a parametr ve stylu HTML by byl použit k označení odkazu. Například šablona nazvanáOrgName
, která vyhledává organizaci podle názvu s neobvyklým 10znakovým názvem organizacea%23b> {c}
, by šablonu označila jako{{OrgName|a%2523b%3E+%7Bc%7D|a%23b> {c}}}
. Varianty tohoto mohou používat%20
místo+
v parametru stylu URL pro mezeru. - Další (ale nesouvisející) escapování používané v HTML nebo XML je použití
>
místo >. Pro znak větší než v parametru stylu HTML nebo pouze pro obyčejné znaky, když fungují správně. Abychom byli přesní, někdo by mohl namítnout, že mít dva povinné argumenty je nejlepší styl pro dlouhodobou stabilitu v případě, že se stránka přesune nebo přeloží na jinou wiki, kde je styl pojmenování stránek odlišný, například kde se používá jiná abeceda. pro pojmenování stránek. - Funkci analyzátoru
urlencode
lze použít k vytvoření šablony, která může být snadno použitelná, ale není zcela obecná. Funkceurlencode
(ve stylu dotazu) převede na%nn
hexadecimální sekvence téměř všechny znaky (včetně procent a plus) kromě alfanumerických znaků a dvou z "bezpečných" znaků adresy URL RFC 1738: - . (pomlčka, tečka) a převede prázdné místo na plus (navíc zakóduje všechny znaky mimo ASCII jako%nn
hexadecimální sekvence. - Užitečná může být technika vložení fragmentu kódu
{{urlencode:{{{userparam|{{PAGENAME}}}))))
do šablony za účelem vytvoření adresy URL externího odkazu (tj. zacházení s jednoduchými názvy stránek jako s daty). Problémem může být název stránky s libovolným ze "tří speciálních" znaků názvu stránky (které vracíPAGENAME
a podobné funkce, jejichž výsledek je určen pro zobrazení na stránce HTML). Například název stránky s ampersandem by vedlo k převedení ampersandu ve stylu HTML (&
) pomocí{{URLENCODE|název_stránky}}
na styl dotazu URL%26amp%3B
, který většina vzdálených webů web nezpracuje úspěšně. U jmen s problematickými znaky nebylo možné šablonu jednoduše použít a poskytnout přímý odkaz ve zdroji wiki nebo přidáním vhodných šablon nebo rozšíření na wiki pro podporu manipulace s řetězci. - Kompromisem mezi těmito dvěma styly je variace na výše uvedený fragment kódu, jako je
{{{userparam|{{urlencode:{{PAGENAME}}}))))
, kdeuserparam
je volitelný, ale když je explicitně zadán, musel by být kódován pro vyhledávání.
Všimněte si, že neexistuje funkce analyzátoru mediawiki, která dokáže úspěšně dekódovat kódování HTML prováděné PAGENAME
.
Stejně tak neexistuje žádná funkce pro dekódování speciálního kódování prováděného PAGENAMEE nebo nalezeného v URL cestách ke stránkám wiki.
Funkce analyzátoru jako #ifeq
nebo #ifswitch
fungují, protože porovnávají svůj vstup pouze dekódováním HTML, ale nikdy nedekódují URL své parametry.
- Chcete-li tedy bezpečně porovnat názvy stránek s výsledkem
{{PAGENAME}}
se zadaným statickým názvem obsahujícím jeden ze tří speciálních znaků, které nebyly kódovány HTML (například hodnota parametru daného transkludované šabloně na stránce wiki), můžete nejprve převést tento parametr na stejné speciální kódování, které provádíPAGENAME
, předáním této hodnoty jako parametru funkce analyzátoru{{PAGENAME|...}}
. - Totéž můžete udělat pro porovnání názvů stránek podle hodnoty
{{PAGENAMEE}}
, nebo můžete použít funkciurlencode
s doplňkovým parametrem stylu jako{{urlencode|pagename|WIKI}}
.
URL webového prohlížeče a HTTP rozhraní webového serveru wiki
The URL you type in or cut/paste into your web browser URL is similar but not exactly the same as PAGENAMEE
.
- Chcete-li ve webovém prohlížeči zadat název stránky jako adresu URL, která přejde přímo na stránku, musí být následující dva znaky při psaní zakódovány ve stylu adresy URL:
% ?
jako%25 %3F
. Typickým příkladem je název stránky, který končí otazníkem, kde redaktoři wiki, aby to fungovalo stejně, vytvoří přesměrování wiki bez otazníku. Pokud zadáte mezeru uprostřed adresy URL, prohlížeč ji před odesláním na jakýkoli webový server převede na%20
. Totéž pro znak"
v uvozovkách, který je převeden na%22
. V závislosti na vašem prohlížeči může také kódovat některé "nebezpečné" znaky, jako je%&'`
. Podrobnosti viz RFC 1738, ale toto chování je závislé na prohlížeči. Ve srovnání s prohlížeči, které podporují pouze http, prohlížeče, které podporují jiná schémata než http, jako je ftp, mají tendenci převádět více těchto znaků. - Způsob zobrazení adresy URL s procentuálním kódováním v poli adresy webového prohlížeče závisí na tom, zda webový server wiki použil přesměrování URL. Znaky znakové sady
PAGENAMEE
budou převedeny pouze v případě, že sousedí s mezerou. Pokud například do webového prohlížeče zadáte adresu URL končící naA_=_B
neboA=B
, odešle tuto adresu URL přímo a vy se dostanete na stránku wiki, pokud existuje. Pokud do webového prohlížeče zadáte adresu URL končící naA = B
(s mezerami kolem rovnítka), váš webový prohlížeč zakóduje mezery na%20
, a tak odešleA%20=%20B
na webový server wiki. Webový server wiki pak převede řetězec naA_%3D_B
a odešle jej zpět do webového prohlížeče wiki přes přesměrování URL. Nyní můžete vidět, proč na pomalém internetovém odkazu můžete vidět, že se mezery v názvu stránky změní nejprve na%20
a poté na podtržítko, protože váš prohlížeč provede první konverzi a webový server wiki provede druhou. Můžete se pokusit zobrazit skutečnou adresu URL tak, že zkopírujete adresu URL v prohlížeči a vložíte ji jako text do jednoduchého textového editoru, ale možná zjistíte, že i tato technika poskytuje výsledky závislé na prohlížeči. - I když to není specifické pro webový server wiki, pro široké znaky prohlížeč provede částečnou akci
urldecode
na skutečné adrese URL. Toto dekódování URL je nezbytné pro použitelnost širokých znaků v URL. Například pro jinak jednoduchou adresu URL končící řetězcem UTF-8 v procentech kódovaném jako%E6%9D%B1%E4%BA%AC
váš prohlížeč obvykle tuto částurldecode
a zobrazí ji jako東京
(Unicode U+6771 U+5EAC), což jsou dva znaky Kanji pro Tokio. Tento výsledek lze použít pro 7bitové i široké znaky, ale je závislý na prohlížeči. Pokud například navštívíte osmimístný název stránkyA!*-. ~A
jakohttp://en.wikipedia.org/wiki/A%21%2A%2D%2E%5F%7EA
, můžete zjistit, že váš webový prohlížeč poté zobrazí adresu URL, která nedekódovala žádné, některé nebo všechny znaky zakódované v procentech a že vyjmutí a vložení z prohlížeče URL do jednoduchého textu nebude obsahovat žádné, některé nebo veškeré toto dekódování url. K jak velké části tohoto dekódování adresy URL dojde během vyjmutí a vložení, závisí na prohlížeči.
Porovnání kódování
Následující tabulka ukazuje vliv různých podporovaných kódování na celou sadu tisknutelných znaků ASCII (plus SPACE (mezerník)) a na dva první tisknutelné znaky Unicode po ASCII. Tabulky a další ovládací prvky bílých znaků jsou podrobněji popsány v níže uvedené části o mezerách, ale tabulka ukazuje některé kontextové "efekty", které se vyskytují s možná vynechanými mezerami a některými dalšími znaky.
Znaky →
↓Kódování
\
|
09AZ- | az | . . | . . | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | . | .. | ... | / | : | ; | < | = | > | ? | @ | [ | \ | ] | ^ | _ | ` | { | | | } | ~ | ¡ | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
{{PAGENAME:...}}
|
09AZ- | Az | . . | . . | ! | " | $ | % | & | ' | ( | ) | * | + | , | ... | / | ; | = | ? | @ | \ | ^ | ` | ~ | ¡ | ||||||||||||||
{{PAGENAMEE:...}}
|
09AZ- | Az | ._. | ._. | ! | %22 | $ | %25 | %26 | %27 | ( | ) | * | %2B | , | ... | / | ; | %3D | %3F | @ | %5C | %5E | %60 | ~ | %C2%A1 | ||||||||||||||
{{urlencode:...|WIKI}}
|
09AZ- | az | ._. | .__. | ! | %22 | %23 | $ | %25 | %26 | %27 | ( | ) |
|
%2B | , | . | .. | ... | / |
|
|
%3C | %3D | %3E | %3F | @ | %5B | %5C | %5D | %5E | _ | %60 | %7B | %7C | %7D | ~ | %C2%A0 | %C2%A1 | |
{{urlencode:...|PATH}}
|
09AZ- | az | .%20. | .%20%20. | %21 | %22 | %23 | %24 | %25 | %26 | %27 | %28 | %29 | %2A | %2B | %2C | . | .. | ... | %2F | %3A | %3B | %3C | %3D | %3E | %3F | %40 | %5B | %5C | %5D | %5E | _ | %60 | %7B | %7C | %7D | ~ | %C2%A0 | %C2%A1 | |
{{urlencode:...|QUERY}}
|
09AZ- | az | .+. | .++. | %21 | %22 | %23 | %24 | %25 | %26 | %27 | %28 | %29 | %2A | %2B | %2C | . | .. | ... | %2F | %3A | %3B | %3C | %3D | %3E | %3F | %40 | %5B | %5C | %5D | %5E | _ | %60 | %7B | %7C | %7D | %7E | %C2%A0 | %C2%A1 | |
{{anchorencode:...}}
|
09AZ- | az | ._. | ._. | ! | " |
|
$ | % | & | ' | ( | ) |
|
+ | , | . | .. | ... | / |
|
|
< | = | > | ? | @ | [ | \ | ] | ^ | ` | { | | | } | ~ | ¡ |
S různými kódováními navrhovanými v MediaWiki je pozoruhodné, že jediné znaky, které se nikdy nemění (nebo neodstraňují) jsou 10 desetinných číslic, minus-pomlčka (-
) a velká písmena základní latinky (A-Z
: Počáteční malé písmeno může být transformováno psaním velkých písmen ve většině wikin kromě těch, které zachovávají rozlišení velkých a malých písmen v názvech stránek).
Všimněte si také, že názvy jmenných prostorů a předpony interwiki nemají velká a malá písmena, a pokud jsou rozpoznány na začátku názvu, mohou být nahrazeny neúplně nesouvisejícím termínem, případně v jiném jazyce a/nebo písmu!
Buďte tedy opatrní se vším, co je před dvojtečkou (:
), protože chování bude specifické pro každou wiki a jejich vlastní místní sadu názvů jmenných prostorů (nebo synonym) a předpony interwiki (tyto místní předpony však nemají vliv na to, jaký urlencode
a anchorencode
se vrátí, což je nezávislé na místních pravidlech pro pojmenování pro každou wiki).
Dva styly PATH
a QUERY
pro urlencode
jsou téměř totožné, jejich jediný rozdíl je, že:
- styl
PATH
zachovává vlnovku (~
), ale zakóduje mezery pomocí procent-hexadecimální notace (%20
). Nepoužívá se ve webových adresách URL, pouze u cest k místním souborům pro použití s shelly podobnými Unixu (bez nutnosti zvláštních escapování nebo uvozovek). Nepoužívá se pro adresy URL používající schéma URIfile:
.[1] - styl
QUERY
kóduje vlnovku (~
), ale odlišně kóduje mezery se znaménkem plus (+
). Používá se v cestách webových adres URL pro lepší kompatibilitu s běžnými webovými zvyklostmi. Od verze MediaWiki 1.17 je to výchozí styl kódování používaný vurlencode
, pokud neurčíte žádný styl nebo pokud zadáte neznámý nebo prázdný styl. - Styl
WIKI
byl výchozí styl v MediaWiki před verzí 1.17. Bohužel vypadly některé úvodní znaky — hvězdička (*
), dvojtečka (:
) nebo středník (;
) — což způsobovalo problémy při jeho použití k předávání hodnot v parametrech dotazu do vzdáleného webového rozhraní API. Tento styl nepoužívejte, s výjimkou kompatibility se starými šablonami v závislosti na tomto starém chování k detekci těchto tří znaků.
Specific characters in page names
Velká písmena v názvech stránek
Malá písmena (a-z
) jsou zachována, s výjimkou počáteční pozice, kde mohou být převedena na velká písmena PAGENAME
a PAGENAMEE
na wiki, které tuto kapitalizaci nezakázaly.
Příklad použití velkých písmen můžete vidět v tabulce výše.
Dvojtečky v názvech stránek
S dvojtečkou (:
) se zachází speciálně v názvech stránek, pokud je prvním znakem v zkráceném křestním jménu (kde bude odkazovat na stránku s popisem namísto zobrazení obsahu této stránky, pokud jde o jeden ze speciálních jmenných prostorů jako je "File", "Image" nebo "Int").
Ale PAGENAME
vynechá tuto úvodní dvojtečku spolu s mezerami bezprostředně za dvojtečkou:
{{PAGENAME: : Example }}
→Example
{{NAMESPACE: : Example }}
→(prázdný řetězec, což znamená hlavní jmenný prostor wiki)
V opačném případě, pokud se neprázdný text před první dvojtečkou shoduje se známým místním jmenným prostorem, pak tento jmenný prostor a dvojtečka budou vynechány, spolu s mezerami bezprostředně za touto dvojtečkou (vynechaný jmenný prostor bude oříznut a vrácen o {{NAMESPACE:...}}
):
{{PAGENAME: File : Example }}
→Example
{{NAMESPACE: File : Example }}
→File
V opačném případě, pokud se neprázdný text před první dvojtečkou shodoval se známou interwiki předponou, pak tato předpona a tato dvojtečka budou vynechány, spolu s mezerami bezprostředně za dvojtečkou, ale bude vrácen prázdný jmenný prostor:
{{PAGENAME: mw:Example }}
→Example
{{NAMESPACE: mw:Example }}
→
{{PAGENAME: mw: Example }}
→Example
{{NAMESPACE: mw: Example }}
→
{{PAGENAME: w:fr:Example }}
→fr:Example
{{NAMESPACE: w:fr:Example }}
→
{{PAGENAME: w: fr: Example }}
→fr: Example
{{NAMESPACE: w: fr: Example }}
→
{{PAGENAME: m: w: fr: Example }}
→w: fr: Example
{{NAMESPACE: m: w: fr: Example }}
→
{{PAGENAME: m : w : fr : Example }}
→w : fr : Example
{{NAMESPACE: m : w : fr : Example }}
→
V opačném případě jsou dvojtečky zachovány, dokonce i text před první dvojtečkou může být platnou interwiki předponou (obsahující pouze písmena bez rozlišení velkých a malých písmen nebo číslice, minus-pomlčky a pomlčky, mezery nebo podtržítka; neomezeno pouze na ASCII) :
{{PAGENAME: Unknown : Example}}
→Unknown : Example
{{NAMESPACE: Unknown : Example}}
→
Stejná pravidla platí pro {{PAGENAMEE:...}}
a {{NAMESPACEE:...}}
, než zakódují svou návratovou hodnotu.
Dvojtečky (a jejich okolní mezery, pokud nejsou na začátku nebo na konci) jsou ponechány nedotčené o {{FULLPAGENAME:...}}
.
Všechny dvojtečky jsou ponechány beze změny kódováním URL. Ale většina (ne všechny) dvojteček je zachována kotevním kódováním.
Tečky a lomítka v názvech stránek
Všimněte si, že názvy stránek jsou analyzovány zleva doprava do (možná prázdných) segmentů (nazývaných "title parts" (části názvu)) oddělených lomítky (/
).
V některých případech výskyt segmentů obsahujících pouze jednu tečku (nebo tečku .
) nebo dvě tečky (..
) způsobí transformaci zbytku řetězce.
Podrobnosti viz Nápověda:Extension:ParserFunctions .
Jinak jsou tyto tečky u {{urlencode:...}}
a {{anchorencode:...}}
ponechány nedotčené, ale lomítka lze převést.
Také sekvence dvou po sobě jdoucích lomítek (//
) nemusí být v názvech stránek akceptována, v závislosti na konfiguraci wiki.
Obvykle je to indikátor, že název je URL, když mu předchází platné schéma URI (nebo žádné schéma URI, kde to znamená, že bude použito výchozí schéma URI http:
nebo https:
, v závislosti na preferencích uživatele).
Schéma URI by pak mělo obsahovat dvojtečku (:
), ale MediaWiki v současné době rozpoznává pouze schémata URI, kde je dvojtečka konečná, v omezeném seznamu. V opačném případě.
Například na této wiki,
"{{PAGENAME|//www.mediawiki.org/}}"
→"//www.mediawiki.org/"
Na stránkách Wikimedie, jako je Mediawiki.org, jsou dvojitá lomítka rozpoznána jako URI a většina platných URI je zakázána jako názvy stránek (pokud existuje schéma URI, mohlo by být rozpoznáno jako jmenný prostor, pokud byl nakonfigurován, jinak název stránky bude spadat do hlavního jmenného prostoru wiki):
- Vytvoření odkazu na tyto názvy stránek podobnému URI používá:
[[page name in double brackets|with optional displayed text]]
- Ale odkazy na efektivní cíl URI používají jednu z následujících možností:
[URL-without-spaces-in-single-brackets with optional displayed text]
- URI-without-spaces (zobrazeno také doslovně, ale odkaz bude podmíněně aktivován, protože podléhá omezením uznaných schémat URI).
Takže na této wiki na mediawiki.org následující kód neočekávaně vytvoří přímý odkaz na externí URL, obklopený doslovnými jednoduchými závorkami:
[[//www.mediawiki.org/|www.mediawiki.org]]
→[[1]]
URI nejsou rozpoznány pomocí kódování URL a kódování kotvy (to znamená, že s urlencode
nelze bezpečně vytvořit platné úplné adresy URL!).
Specific characters in anchors
Dvojtečky (:) v kotvách
Kotevní kódování je trochu složitější: Většina dvojteček je zachována, kromě případů, kdy jsou na předních pozicích, i když nadpis sekce jako je tento může začínat dvojtečkou).
Takže pro název této sekce dostanete
{{anchorencode: : Colons (:) in anchors}}
→
_Colons_(:)_in_anchors
Všimněte si, že dvojtečka je neočekávaně převedena vložením nového řádku před ni, jako by tento parametr byl obsahem zdrojové stránky wiki (což způsobilo vykreslení odsazeného bloku)! Výsledek neodpovídá identifikátoru, který MediaWiki vygenerovala pro tento nadpis sekce.
Svislítka (|) v kotvách
Kritičtější chyba/omezení je pozorována, když je řídícím znakem svislá čára (|
), protože se s ní zachází jako s oddělovačem parametrů {{anchorencode:...}}
(navzdory skutečnosti, že vyžaduje pouze jeden parametr bez možnosti navíc):
{{anchorencode: | Pipes (|) in anchors}}
→- prázdný řetězec, takže vše za prvním svislítkem v záhlaví sekce je zahozeno!
Běžné řešení (pomocí běžné šablony obslužného programu {{!}}, aby se zabránilo tomu, že doslovné svislítko vrácené touto šablonou nebude interpretováno jako oddělovač parametrů):
{{anchorencode: {{!}} Pipes ({{!}}) in anchors}}
→|_Pipes_(|)_in_anchors
Funguje to proto, že expanze šablon je zpožděna poté, co byl název funkce analyzátoru a její parametr(y) v {{anchorencode:...}}
nejprve analyzovány až do dvojtečky a poté (zbytečně) odděleny na kanálech: Expanze šablon, které mohou být přítomny uvnitř názvy parametrů nebo hodnoty mezi dvojtečkou a dvojitou uzavírací složenou závorkou se objeví pouze v případě, že tyto parametry budou dotazovány samotnou funkcí analyzátoru, ale počet nebo pořadí těchto parametrů se nezmění.
Stejné řešení lze použít, pokud potřebujete projít některým z následujících:
- dvě doslovné otevírací závorky (
{{
) pomocí {{(}}{{(}} nebo {{((}} - dvě doslovné zavírací závorky (
}}
) pomocí {{)}}{{)}} nebo {{))}}
Středníky (;
), hvězdičky (*
) nebo mřížky (#
) v kotvách
Ke stejné chybě nedochází, pokud je prvním neprázdným znakem (nebo jakýmkoli dalším znakem) v záhlaví oddílu středník (;
), hvězdička (*
) nebo dokonce ostré znaménko (#
), takže tyto znaky jsou zachovány spolu se zbytkem řetězce:
{{anchorencode: ; Semicolons (;) in anchors}}
→;_Semicolons_(;)_in_anchors
{{anchorencode: * Asterisks (*) in anchors}}
→*_Asterisks_(*)_in_anchors
{{anchorencode: # Sharp signs (#) in anchors}}
→#_Sharp_signs_(#)_in_anchors
Mezery v názvech stránek a ukotvení (nadpisy sekcí)
- Mezery na začátku a na konci jsou vynechány a zbývající mezery uprostřed budou oříznuty[2] v názvech stránek a kotvách (ale ne v kódování URL):
{{PAGENAME: A B }}
→A B
{{PAGENAMEE: A B }}
→A_B
{{urlencode: A B |WIKI}}
→A__B
{{urlencode: A B |PATH}}
→A%20%20B
{{urlencode: A B |QUERY}}
→A++B
{{anchorencode: A B }}
→A_B
- Tabulky a nové řádky nejsou v názvech stránek přijímány, ale jsou zachovány v kódování URL a kotvách:
{{PAGENAME:A B}}
→(prázdný řetězec, což znamená neplatný název stránky)
{{PAGENAMEE:A B}}
→(prázdný řetězec, což znamená neplatný název stránky)
{{urlencode:A B|WIKI}}
→A%09B
{{urlencode:A B|PATH}}
→A%09B
{{urlencode:A B|QUERY}}
→A%09B
{{anchorencode:A B}}
→A_B
Notes
- ↑ URI — Uniform Resource Identifier
- ↑ Trimming functions