通常我会使用:
HttpContext.Current.Server.UrlEncode("url");
但由于这是一个控制台应用程序,HttpContext.Current
始终是null
。
是否有其他方法可以使用我可以使用的相同方法?
答案 0 :(得分:76)
试试这个!
Uri.EscapeUriString(url);
或者
Uri.EscapeDataString(data)
无需参考System.Web。
修改:请参阅another以获取更多信息......
答案 1 :(得分:72)
我不是.NET人,但是,你不能使用:
HttpUtility.UrlEncode Method (String)
这里描述:
答案 2 :(得分:13)
Ian Hopkins的代码为我提供了诀窍,无需添加对System.Web的引用。对于那些不使用VB.NET的人来说,这是一个C#的端口:
/// <summary>
/// URL encoding class. Note: use at your own risk.
/// Written by: Ian Hopkins (http://www.lucidhelix.com)
/// Date: 2008-Dec-23
/// (Ported to C# by t3rse (http://www.t3rse.com))
/// </summary>
public class UrlHelper
{
public static string Encode(string str) {
var charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"));
return Regex.Replace(str,
String.Format("[^{0}]", charClass),
new MatchEvaluator(EncodeEvaluator));
}
public static string EncodeEvaluator(Match match)
{
return (match.Value == " ")?"+" : String.Format("%{0:X2}", Convert.ToInt32(match.Value[0]));
}
public static string DecodeEvaluator(Match match) {
return Convert.ToChar(int.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber)).ToString();
}
public static string Decode(string str)
{
return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator));
}
}
答案 3 :(得分:6)
你想要使用
System.Web.HttpUtility.urlencode("url")
确保将system.web作为项目中的参考之一。我不认为它在控制台应用程序中默认包含为参考。
答案 4 :(得分:4)
尝试在HttpUtility类中使用UrlEncode方法。
答案 5 :(得分:3)
我自己遇到了这个问题,而不是将System.Web程序集添加到我的项目中,我编写了一个用于编码/解码URL的类(它很简单,我做了一些测试,但不是很多) 。我在下面列出了源代码。请:如果您重复使用此评论,请将评论保留在顶部,如果发生故障,请不要责怪我,请从代码中学习。
''' <summary>
''' URL encoding class. Note: use at your own risk.
''' Written by: Ian Hopkins (http://www.lucidhelix.com)
''' Date: 2008-Dec-23
''' </summary>
Public Class UrlHelper
Public Shared Function Encode(ByVal str As String) As String
Dim charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"))
Dim pattern = String.Format("[^{0}]", charClass)
Dim evaluator As New MatchEvaluator(AddressOf EncodeEvaluator)
' replace the encoded characters
Return Regex.Replace(str, pattern, evaluator)
End Function
Private Shared Function EncodeEvaluator(ByVal match As Match) As String
' Replace the " "s with "+"s
If (match.Value = " ") Then
Return "+"
End If
Return String.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0)))
End Function
Public Shared Function Decode(ByVal str As String) As String
Dim evaluator As New MatchEvaluator(AddressOf DecodeEvaluator)
' Replace the "+"s with " "s
str = str.Replace("+"c, " "c)
' Replace the encoded characters
Return Regex.Replace(str, "%[0-9a-zA-Z][0-9a-zA-Z]", evaluator)
End Function
Private Shared Function DecodeEvaluator(ByVal match As Match) As String
Return "" + Convert.ToChar(Integer.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber))
End Function
End Class
答案 6 :(得分:3)
使用iv1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Drawable backgrounds[] = new Drawable[2];
Resources res = getResources();
backgrounds[0] = ContextCompat.getDrawable(MainActivity.this, R.drawable.simonsays_yellow);
backgrounds[1] = ContextCompat.getDrawable(MainActivity.this, R.drawable.simonsays_yellow_blink);
TransitionDrawable crossfader = new TransitionDrawable(backgrounds);
ImageView image = (ImageView) findViewById(R.id.iv1);
image.setImageDrawable(crossfader);
crossfader.startTransition(0);
crossfader.reverseTransition(200);
}
});
命名空间
WebUtility.UrlEncode(string)
答案 7 :(得分:2)
Kibbee提供了真正的答案。是的,HttpUtility.UrlEncode是正确的使用方法,但默认情况下它不适用于控制台应用程序。您必须添加对System.Web的引用。为此,
现在您可以使用UrlEncode方法。你仍然想要添加,
使用System.Web
位于控制台应用程序的顶部或在调用方法时使用完整的命名空间
System.Web.HttpUtility.UrlEncode(someString)
答案 8 :(得分:1)
System.Web中的HttpUtility.UrlEncode(“url”)。
答案 9 :(得分:1)
使用静态HttpUtility.UrlEncode方法。
答案 10 :(得分:0)
最好的方法是添加对System.web..dll的引用
并使用 var EncodedUrl = System.Web.HttpUtility.UrlEncode(&#34; URL_TEXT&#34;);
您可以在System.web.dll
找到文件答案 11 :(得分:0)
Uri.EscapeUriString不应该用于转义要在URL中传递的字符串,因为它不会像您期望的那样对所有字符进行编码。 '+'是一个很好的例子,没有被转义。然后将其转换为URL中的空格,因为这是在简单URI中的含义。显然,只要您尝试在URL中传递类似base 64编码的字符串,并且在接收端的字符串中出现空格,就会导致大量问题。
您可以使用HttpUtility.UrlEncode并为项目添加所需的引用(如果您正在与Web应用程序通信,那么我认为没有理由不这样做。)
或者在Uri.EscapeUriString上使用Uri.EscapeDataString,如下所述:https://stackoverflow.com/a/34189188/7391