ویژگی تصویر

تابع ENCODEURL در اکسل — توضیح کامل و نمونه‌های کاربردی

  /  اکسل   /  تابع ENCODEURL در اکسل
بنر تبلیغاتی الف

تابع ENCODEURL یکی از توابع مفید اکسل برای تبدیل رشته‌ها به قالب مناسب برای استفاده در آدرس‌ها (URL) است. این تابع کاراکترهای خاص و نویسه‌های غیرقابل‌پذیر در URL را به نمایه‌های درصدی (percent-encoding) تبدیل می‌کند تا بتوان آن‌ها را به‌عنوان پارامتر query یا بخشی از یک آدرس وب استفاده کرد بدون اینکه آدرس خراب شود.

سینتکس و رفتار پایه

سینتکس بسیار ساده است:

=ENCODEURL(text)

در اینجا text رشته‌ای است که می‌خواهید رمزگذاری کنید. خروجی یک رشتهٔ جدید است که در آن کاراکترهای رزرو شده، فاصله و سایر نویسه‌های نامعتبر در URL به فرم %xx (مطابق با استاندارد RFC) تبدیل شده‌اند.

نکات مهم دربارهٔ نحوهٔ رمزگذاری

  • ENCODEURL فضای خالی را به %20 تبدیل می‌کند (نه +). این رفتار با استانداردهای URI/URL (RFC 3986) سازگار است.
  • نویسه‌های غیر ASCII (مثلاً حروف فارسی یا کاراکترهای یونیکد) ابتدا به UTF-8 تبدیل شده و سپس هر بایت به صورت درصدی نمایش داده می‌شود.
  • معمولاً باید فقط مقادیر پارامترها را رمزگذاری کنید، نه کل URL شامل پروتکل و اسلش‌ها. اگر کل URL را رمزگذاری کنید، کاراکترهایی مثل / و : به %2F و %3A تبدیل می‌شوند که باعث شکستن آدرس می‌شود.
  • در نسخه‌هایی از اکسل که تابع پشتیبانی نمی‌شود، نتیجه ممکن است ارور #NAME? باشد.

نمونه‌های عملی

ورودیفرمولخروجی (نمونه)
Hello World!=ENCODEURL(“Hello World!”)Hello%20World%21
name=John & age=30=ENCODEURL(“name=John & age=30”)name%3DJohn%20%26%20age%3D30
پارامتر فارسی=ENCODEURL(“پارامتر فارسی”)(رشته‌ای از بایت‌های UTF-8 به‌صورت %xx…)

توجه: برای رشته‌های غیرلاتین، خروجی شامل دنباله‌ای از نمونه‌های درصدی است که نمایانگر بایت‌های UTF-8 است. مثال کامل بایت‌ها ممکن است طولانی باشد، بنابراین در این جدول به صورت توضیح نمایش داده شده است.

ترکیب ENCODEURL با توابع دیگر — مثال‌های واقعی

یک کاربرد رایج، ساخت درخواست‌های وب با تابع WEBSERVICE یا APIهای HTTP است. همیشه مقدار پارامترها را با ENCODEURL رمزگذاری کنید تا کاراکترهای خاص مشکلی ایجاد نکنند.

=WEBSERVICE("https://api.example.com/search?q=" & ENCODEURL(A2))

در این فرمول مقدار سلول A2 به صورت امن به پارامتر q افزوده می‌شود. اگر A2 شامل فاصله یا حروف خاص باشد، به‌درستی رمزگذاری خواهد شد.

نمونهٔ دیگری برای چند پارامتر:

= "https://api.example.com/search?" &
  "q=" & ENCODEURL(A2) &
  "&lang=" & ENCODEURL(B2) &
  "&page=" & ENCODEURL(C2)

در این ترکیب، فقط مقادیر پارامترها رمزگذاری شده‌اند و ساختار اصلی URL دست‌نخورده باقی می‌ماند.

نوشتن تابع اختصاصی در VBA (جایگزین برای نسخه‌های قدیمی)

اگر نسخهٔ اکسل شما تابع ENCODEURL را ندارد، می‌توانید یک تابع کوچک VBA برای رمزگذاری URL بسازید. مثال زیر یک UDF ساده است:

Function URLEncode(s As String) As String
    Dim i As Long, ch As Integer
    Dim result As String
    Dim bytes() As Byte
    bytes = StrConv(s, vbFromUnicode)
    For i = LBound(bytes) To UBound(bytes)
        ch = bytes(i)
        Select Case ch
            Case 48 To 57, 65 To 90, 97 To 122, 45, 46, 95, 126 '0-9 A-Z a-z - . _ ~
                result = result & Chr(ch)
            Case Else
                result = result & "%" & Hex(ch)
        End Select
    Next i
    URLEncode = result
End Function

توضیح: این کد رشته ورودی را به بایت‌های محلی تبدیل می‌کند، هر بایت را بررسی کرده و اگر در مجموعه حروف و ارقام یا کاراکترهای امن باشد، همان را اضافه می‌کند و در غیر این‌صورت به فرم درصدی (%xx) قرار می‌دهد. توجه کنید که این نمونه ساده است؛ برای فرمت صحیح UTF-8 ممکن است نیاز به تبدیل پیشرفته‌تر داشته باشید یا از کتابخانه‌های COM برای تبدیل به UTF-8 استفاده شود.

خطاها و راهکارهای رایج

  • #NAME?: تابع در نسخهٔ اکسل شما موجود نیست. بررسی کنید که از نسخه‌ای استفاده می‌کنید که ENCODEURL را پشتیبانی می‌کند یا از راه‌حل VBA استفاده کنید.
  • رمزگذاری کامل URL: از رمزگذاری کل آدرس پرهیز کنید. تنها مقادیر پارامترها نیاز به ENCODEURL دارند.
  • مسائل با کاراکترهای یونیکد: اگر نیاز به تضمین UTF-8 دارید و تابع داخلی خروجی مطلوب نمی‌دهد، از VBA پیشرفته یا ابزارهای خارجی استفاده کنید.

بهینه‌سازی و نکات حرفه‌ای

  • برای لیستی از پارامترها از TEXTJOIN (در نسخه‌های جدید) به‌همراه ENCODEURL برای مقادیر استفاده کنید تا فرمول‌ها خواناتر و قابل نگهداری شوند.
  • برای بازخوانی داده‌های API از WEBSERVICE همراه با FILTERXML استفاده کنید؛ اما همواره مقادیر ارسال‌شده را با ENCODEURL امن کنید.
  • در داشبوردها یا فرم‌های ورودی، قبل از ارسال داده‌ها به سرویس‌های وب، از ENCODEURL برای فیلدهای متن استفاده کنید تا SQL injection یا خرابی ناشی از کاراکترهای خاص کاهش یابد (توجه: ENCODEURL محافظت کامل امنیتی نیست؛ بررسی امنیتی سمت سرور نیز لازم است).

خلاصهٔ سریع

  • ENCODEURL متن را برای استفاده در URLها ایمن می‌کند (percent-encoding).
  • فاصله‌ها به %20 تبدیل می‌شوند و کاراکترهای یونیکد ابتدا به UTF-8 سپس درصدی می‌شوند.
  • فقط مقادیر پارامترها را رمزگذاری کنید، نه کل URL.
  • در صورت نبود تابع در نسخهٔ اکسل، می‌توان با VBA تابع جایگزین نوشت.

در صورت نیاز می‌توان مثال‌های مخصوص به API خاص، نحوهٔ استفاده با Power Query یا نمونه‌های پیچیده‌تر را نیز اضافه کرد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: