[go: up one dir, main page]

Vés al contingut

Mòdul:urlencode

De Viccionari
Icona de documentació de mòdul Documentació del mòdul[mostra] [modifica] [refresca]

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Mediawiki utilitza la codificació de caràcters UTF-8. Així la funció {{urlencode: }} codifica en aquesta norma.

Alguns llocs webs poden utilitzar altres codificacions. Això es pot trobar amb una funció del navegador per visualitzant el codi font de la pàgina, donant alguna cosa com:

<meta charset="UTF-8" />
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />

Per codificar en latin1 o ISO 8859-1 es pot usar la sintaxi:

{{#invoke:urlencode|encode|<text>|ISO 8859-1}}

o bé la drecera

{{#invoke:urlencode|latin1|<text>}}

Per exemple:

  • {{#invoke:urlencode|latin1|Viquipèdia}} → Viquip%E8dia

en canvi compareu

  • {{urlencode:Viquipèdia}} → Viquip%C3%A8dia

Vegeu els casos de prova en la pàgina de discussió.

-- Codificació de caràcters amb normes diferents a UTF-8

local p = {}

local encoders = {}

encoders["ISO 8859-1"] = function(text)
	local ret = {}
	
	for cp in mw.ustring.gcodepoint(text) do
		if cp >= 256 then
			error("Caràcter ISO 8859-1 no vàlid: \"" .. mw.ustring.char(cp) .. "\".")
		end
		
		table.insert(ret, string.char(cp))
	end
	
	return table.concat(ret)
end

-- strip combining diacritical marks: U+0300-U+036F
-- see https://en.wikipedia.org/wiki/Combining_character
encoders["nodiacritics"] = function(text)
	return (mw.ustring.gsub(mw.ustring.toNFD(text), "[\204\128-\205\175]", ""):gsub(" ", "-")) -- parentheses for string gsub result, not count
end

-- converts a title to text with hyphens, lowercase and no diacritics
encoders["hyphens"] = function(text)
	local ret = encoders["nodiacritics"](text)
	ret = mw.ustring.lower(ret)
	ret = mw.ustring.gsub(ret, "['’]", "")
	
	return ret
end

function p.encode(text, encoding)
	if type(text) == "table" then
		encoding = text.args[2]
		text = text.args[1]
	end
	
	local encoder = encoders[encoding]
	
	if not encoder then
		error("No existeix el codificador \"" .. encoding .. "\".")
	end
	
	return mw.uri.encode(encoder(text))
end

-- drecera, compatibilitat amb sintaxi anterior
function p.latin1(text)
	if type(text) == "table" then
		text = text.args[1]
	end
	
	return p.encode(text, "ISO 8859-1")
end

return p