从URL清理外来字符/口音

时间:2012-01-20 20:01:39

标签: c# asp.net string asp.net-4.0

我需要编写一个服务器端函数来清理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';

如何在不获取所有这些字符的情况下解码网址?

我无法做客户端或改变他们进入我职能部门的方式。

3 个答案:

答案 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)。