MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Building "DecodeUrl" function in Power Apps

f:id:mofumofu_dance:20211227001848p:plain

Power Apps has capability to encode text to percent-encoded style (ex: EncodeUrl("@") -> %40), however, there is no decoding function (DecodeUrl).

So far, highly nested Substitute functions are used to decode a percent-encoded text. (See ref Decode URL in PowerApps - Power Platform Community )

In this short post, I will show how build the DecodeUrl function in Power Apps by combining built-in functions without nested Substitute.

Formula

Formula to decode Url components is expressed as following :

With(
    {
        decodeTable:AddColumns(AddColumns(Sequence(128,0),"char",Char(Value)),"ec",Substitute(EncodeUrl(char),"%","")),
        inputText:"params%3D%7B%22type%22%3A%22foo%22%2C%22color%22%3A%22green%22%7D"
    },
    If(
        CountRows(Split(inputText,"%"))>1,
        First(Split(inputText,"%")).Result &
        Concat(
            LastN(Split(inputText,"%"),CountRows(Split(inputText,"%"))-1),
            LookUp(decodeTable,ec=Left(Result,2)).char&Right(Result,Len(Result)-2),
            ""
        ),
        inputText
    )
)

where inputText is percent-encoded text, and this returns params={"type":"foo","color":"green"}.

f:id:mofumofu_dance:20211227001020p:plain

Limitation

The formula does not support multi-byte characters, since it performs "Split" in terms of "%" to find %-encoded part in given text, ( ä would be encoded to %C3%A4 but it is not correctly decoded by above formula)