Ответ 1
WebUtility
В портативных библиотеках классов, которым посчастливилось ориентироваться на .NET 4.5 (например, Profile7), многие из методов HttpUtility имеют братья и сестры в System.Net.WebUtility
.
using System.Net;
WebUtility.UrlEncode("some?string#");
Потенциальное предупреждение
В то время как некоторые из методов брата, похоже, идентичны своим коллегам HttpUtility, у этого есть небольшая разница между результирующими кодировками. WebUtility.UrlEncode
генерирует кодировки верхнего регистра, а HttpUtility.UrlEncode
генерирует строчные кодировки.
WebUtility.UrlEncode("?") // -> "%3F"
HttpUtility.UrlEncode("?") // -> "%3f"
Сделать его обратно совместимым
Если вы зависите от своего кода PCL, генерирующего именно то, что вы бы сгенерировали с помощью предыдущего кода HttpUtility, вы могли бы создать свой собственный вспомогательный метод вокруг этого метода и повторно использовать его.
using System.Text.RegularExpressions;
public static string UrlEncodeOldSchool(string value) {
var encodedValue = WebUtility.UrlEncode(value);
return Regex.Replace(encodedValue, "(%[0-9A-F]{2})",
encodedChar => encodedChar.Value.ToLowerInvariant());
}
(Даже если это простой, всегда регулярное выражение на свой страх и риск.)