" ingo/codec/URL.vim: URL encoding / decoding. " " DEPENDENCIES: " - ingo/collections/fromsplit.vim autoload script " " Copyright: (C) 2012-2016 Ingo Karkat " The VIM LICENSE applies to this script; see ':help copyright'. " " Source: " Encoding / decoding algorithms taken from unimpaired.vim (vimscript #1590) " by Tim Pope. " " Maintainer: Ingo Karkat " " REVISION DATE REMARKS " 1.028.004 10-Oct-2016 ingo#codec#URL#Decode(): Also convert the " character set to UTF-8 to properly handle " non-ASCII characters. For example, %C3%9C should " decode to "Ü", not to "ɜ". " 1.019.003 20-May-2014 Move into ingo library, because this is now used " by multiple plugins. " 002 09-May-2012 Add subs#URL#FilespecEncode() that does not " encoding the path separator "/". This is useful " for encoding normal filespecs. " 001 30-Mar-2012 file creation function! s:Encode( chars, text ) return substitute(a:text, a:chars, '\="%" . printf("%02X", char2nr(submatch(0)))', 'g') endfunction function! ingo#codec#URL#Encode( text ) return s:Encode('[^A-Za-z0-9_.~-]', a:text) endfunction function! ingo#codec#URL#FilespecEncode( text ) return s:Encode('[^A-Za-z0-9_./~-]', substitute(a:text, '\\', '/', 'g')) endfunction function! ingo#codec#URL#DecodeAndConvertCharset( urlEscapedText ) let l:decodedText = substitute(a:urlEscapedText, '%\(\x\x\)', '\=nr2char(''0x'' . submatch(1))', 'g') "let l:convertedText = subs#Charset#LatinToUtf8(l:decodedText) let l:convertedText = iconv(l:decodedText, 'utf-8', 'latin1') return l:convertedText endfunction function! ingo#codec#URL#Decode( text ) let l:text = substitute(substitute(substitute(a:text, '%0[Aa]\n$', '%0A', ''), '%0[Aa]', '\n', 'g'), '+', ' ', 'g') return join(ingo#collections#fromsplit#MapSeparators(l:text, '\%(%\x\x\)\+', 'ingo#codec#URL#DecodeAndConvertCharset(v:val)'), '') endfunction " vim: set ts=8 sts=4 sw=4 noexpandtab ff=unix fdm=syntax :