سؤال

عادةً سأستخدم فقط:

HttpContext.Current.Server.UrlEncode("url");

ولكن بما أن هذا هو تطبيق وحدة التحكم، HttpContext.Current سيكون دائما null.

هل هناك طريقة أخرى تفعل نفس الشيء يمكنني استخدامها؟

هل كانت مفيدة؟

المحلول

جرب هذا!

Uri.EscapeUriString(url);

أو

Uri.EscapeDataString(data)

لا حاجة للإشارة إلى System.Web.

يحرر: لطفا أنظر آخر لذا أجب للمزيد...

نصائح أخرى

أنا لست من مستخدمي .NET، لكن، ألا يمكنك استخدام:

HttpUtility.UrlEncode Method (String)

والذي تم وصفه هنا:

طريقة HttpUtility.UrlEncode (سلسلة) على MSDN

الكود من Ian Hopkins يقوم بالخدعة بالنسبة لي دون الحاجة إلى إضافة مرجع إلى System.Web.فيما يلي منفذ إلى C# لأولئك الذين لا يستخدمون VB.NET:

/// <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));
    }
}

سوف ترغب في استخدامها

System.Web.HttpUtility.urlencode("url")

تأكد من أن لديك system.web كأحد المراجع في مشروعك.لا أعتقد أنه تم تضمينه كمرجع افتراضيًا في تطبيقات وحدة التحكم.

حاول استخدام أسلوب UrlEncode في فئة HttpUtility.

  1. http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

لقد واجهت هذه المشكلة بنفسي، وبدلاً من إضافة تجميع 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

يستخدم WebUtility.UrlEncode(string) من System.Net مساحة الاسم

يقدم Kibbee الجواب الحقيقي.نعم، HttpUtility.UrlEncode هي الطريقة الصحيحة للاستخدام، ولكنها لن تكون متاحة افتراضيًا لتطبيق وحدة التحكم.أنت يجب إضافة مرجع إلى System.Web.للقيام بذلك،

  1. في مستكشف الحلول الخاص بك، انقر بزر الماوس الأيمن على المراجع
  2. اختر "إضافة مرجع"
  3. في مربع الحوار "إضافة مرجع"، استخدم علامة التبويب .NET
  4. قم بالتمرير لأسفل إلى System.Web، وحدد ذلك، ثم اضغط على "موافق".

الآن يمكنك استخدام طريقة UrlEncode.ستظل ترغب في الإضافة،

باستخدام System.Web

في الجزء العلوي من تطبيق وحدة التحكم الخاصة بك أو استخدم مساحة الاسم الكاملة عند استدعاء الطريقة،

System.Web.HttpUtility.UrlEncode(someString)

HttpUtility.UrlEncode("url") في System.Web.

استخدم طريقة HttpUtility.UrlEncode الثابتة.

أفضل شيء هو إضافة مرجع إلى System.web..dll

واستخدام var encodedurl = system.web.httputily.urlencode ("url_text") ؛

يمكنك العثور على الملف في System.web.dll

لا ينبغي استخدام Uri.EscapeUriString للهروب من سلسلة يتم تمريرها في عنوان URL لأنه لا يقوم بتشفير كافة الأحرف كما قد تتوقع."+" هو مثال جيد لا يمكن الهروب منه.يتم تحويل هذا بعد ذلك إلى مسافة في عنوان URL لأن هذا هو ما يعنيه عنوان URI بسيط.من الواضح أن هذا يسبب مشكلات كبيرة في اللحظة التي تحاول فيها تمرير شيء مثل سلسلة مشفرة بقاعدة 64 في عنوان URL وتظهر المسافات في جميع أنحاء السلسلة في الطرف المتلقي.

يمكنك استخدام HttpUtility.UrlEncode وإضافة المراجع المطلوبة إلى مشروعك (وإذا كنت تتواصل باستخدام تطبيق ويب، فلا أرى أي سبب يمنعك من القيام بذلك).

بدلاً من ذلك، استخدم Uri.EscapeDataString عبر Uri.EscapeUriString كما هو موضح جيدًا هنا: https://stackoverflow.com/a/34189188/7391

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top