我需要编写一个服务器端函数来清理URL编码的字符串。
示例查询字符串:
FirstName=John&LastName=B%F3th&Address=San+Endre+%FAt+12%2F14
当我通过HttpUtility.UrlDecode()
时,我得到了:
FirstName=John&LastName=B�th&Address=San Endre �t 12/14
此SO post中的函数看起来很完美,但它需要已经有重音的已解码字符串:
RemoveDiacritics('Bóth`) ==> 'Both';
RemoveDiacritics('San Endre út 12/14`) ==> 'San Endre ut 12/14';
如何在不获取所有这些�
字符的情况下解码网址?
我无法做客户端或改变他们进入我职能部门的方式。
答案 0 :(得分:7)
我同意已经提出的论点;但是,如果您始终从同一客户端接收编码字符串,则可以匹配其编码。在这种情况下,它们似乎使用ISO/IEC 8859-1,非正式地称为 Latin-1 ,这是使用中最受欢迎的8位字符集之一。您可以使用以下代码解码ISO / IEC 8859-1(这将正确解码您提供的示例字符串):
HttpUtility.UrlDecode(encodedInput, Encoding.GetEncoding("iso-8859-1"));
MSDN保证.NET Framework本身支持上述代码页,无论底层平台如何;请参阅Encoding Class支持的编码表。
答案 1 :(得分:2)
UrlDecode需要UTF-8作为输入,其中每个大于\ u007F的字符编码为至少2个字节。所以正确的字符串(如果字符是\ u00F3,ó)将包含%C3%B3
,而不是%F3
。
如果字符串以你获得它们的方式到达,我不确定你能做多少。不是标准库,即。
顺便说一句,从外国角色剥离口音是可以的,但我不会称之为“消毒”。
答案 2 :(得分:1)
%F3和%FA不是UTF8,也不是ASCII编码。看起来客户端代码在当前页面的语言环境中编码字符串。
根据您的需要,您可以简单地删除127以上的所有字符,或者弄清楚如何正确解码传入的Url(我不认为内置函数可以按原样处理它)。
我会将字符复制到字节数组中(包括手动解码的%编码的字符串)并使用正确的编码将其转换为字符串(使用Encoding.GetString - http://msdn.microsoft.com/en-us/library/system.text.encoding.getstring.aspx)。