ItemLink/Archive

itemLinks are returned by several functions, e.g. GetAuctionItemLink(), GetContainerItemLink(), GetInventoryItemLink(), etc.
In essence, they are itemStrings with additional formatting to make in-game text controls display them as clickable hyperlinks.
 |cff9d9d9d|Hitem:7073::::::::80:|h[Broken Fang]|h|r
Broken up in its components:
* "|cff9d9d9d" – Colorizes the link with a medium grey color (hex color code)
** The first two characters after pipe-c may be the alpha level, where ff is fully opaque.
** The next three sets of two characters represent the red, green, and blue levels, just like HTML.
* "|H" – "Hyperlink link data starts here"
* "item:7073:::::::::" – An informational string for the item.
* "|h" – "End of link, text follows"
* "[Broken Fang]" – The actual text displayed
* "|h" – "End of hyperlink"
* "|r" – Restores color to normal
You can extract the itemString from a given itemLink with the following function:
local itemString = string.match(itemLink, "item[%-?%d:]+")
Note: The information string will be an itemString for most items, but there are a few exceptions:
* battlepetString - Caged Battle Pets
* keystoneString - Mythic Keystones
* enchantString
* questString
* spellString
To obtain all the data within a hyperlink, you can use the following:
local _, _, Color, Ltype, Id, Enchant, Gem1, Gem2, Gem3, Gem4, Suffix, Unique, LinkLvl, reforging, Name = string.find(itemLink, "|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?")
Note that this will accept any hyperlink (item/spell/quest/talent/achievement/tradeskill/etc), it will take itemstrings alone, or even just a single number.
Note that linklevel was added in 3.0, and reforging stat was added in 4.0.
Links stored from previous revisions may have problems being parsed with current code.
== Printing links for debug ==
Printing out the contents of an item link is perhaps not so obvious; displaying it anywhere in-game will just show you a clickable link. Reformat it slightly to ruin the escape sequences and you'll see what it really looks like:
link = GetContainerItemLink(0, 1);
printable = gsub(link, "\124", "\124\124");
ChatFrame1:AddMessage("Here's what it really looks like: \"" .. printable .. "\"");
"124" is the ascii value of the "|" character. If you are writing this in a regular .lua file, feel free to go ahead and just use "|" and "||". However, if you're typing it in an in-game editor, it's better to use the ascii code escape to avoid problems.