PDA

View Full Version : چرا نیاز به EnCoding نیاز داریم؟



ahmad156
سه شنبه 11 تیر 1392, 21:49 عصر
سلام دوستان
استفاده از encoding و decoding چه مزایایی داره؟اصلا دلیل وجودش چی هست؟
وقتی از QueryString استفاده میکنیم چرا (در صورت وجود بعضی کاراکترها) نیاز encoding اون داریم؟
ممنون

dbdbdb
چهارشنبه 12 تیر 1392, 15:29 عصر
این لینک کمکت میکنه
http://barnamenevis.org/showthread.php?403023-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%B1%D8%B4%D8%AA%D9%87-%D9%87%D8%A7%DB%8C-UTF-8-%D8%B1%D8%A7-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%DA%A9%D9%86%D9%85-%D8%9F&highlight=encoding

ahmad156
چهارشنبه 12 تیر 1392, 19:01 عصر
دوست عزیز طرز کارکرد اون رو میدونم.سوالم چیز دیگه ای هست!

ahmad156
چهارشنبه 12 تیر 1392, 19:44 عصر
جواب سوال اولم رو گرفتم:لبخندساده:
دومی رو کسی نمیده:ناراحت:

dbdbdb
پنج شنبه 13 تیر 1392, 00:44 صبح
دوست عزیز این برا بعضی کارکتر ها نیازه مثل &

فرض کنید میخام اینو بساز


WebForm1.aspx?id=Ali&amir
کد بالا من میگم وقتی تقاضای QueryString["id"] داشتم هر دو ali&amir رو بهم بده یعنی & هم جزو محتویات منه

اما بدون encodin فقط ali رو میده چون & رو جزو کاراکترهای حساس queryString درنظر گرفته

اما اگه بیاییم موقع ساخت url ما encoding انجام بدیم و موقع خوندن decode کنیم این مشکلات بوجود نمیاد

مثلا url بالای به صورت encode شده متغییر id شامل ali&amir میشود خروجی Decode شده هم ali&amir اما در حالت بدون encode فقط شامل ali چون & جزو کاراکتر های ساخت url بود.
البته این قاعده واس چند تا کاراکتر دیگه م هست.وِیژوال استودیو رو باز کنید و چک کنید شاید من دروغ گفتم!!!

ahmad156
پنج شنبه 13 تیر 1392, 09:05 صبح
دوست عزیز خدمتتون عرض کردم میدونم چه جوری استفاده میشه و بارها استفاده کردم
سوال الان من اینه که چرا وقتی از QueryString استفاده میکنیم بعضی کاراکترها نیاز به encoding داره؟یا به قول شما کاراکتر حساس هست!!!!

eshpilen
پنج شنبه 13 تیر 1392, 09:50 صبح
خب بخاطر اینکه در استانداردهای مربوطه کاراکترهایی که میتونن در URL درج بشن محدودیت دارن. بنابراین یکسری کاراکترها (یا بهتره بطور کلی تر بگیم مقادیر بایتی) رو نمیشه بطور مستقیم در URL درج کرد و باید از فرم Encode شدهء اونا استفاده کرد که در این فرم تبدیل شده دیگه کاراکتر غیرمجازی وجود نداره.

حالا اینکه چرا کاراکترها محدودیت دارن خب خودش به مسائل فنی و تمهیدات طراحی استانداردها و پروتکل های مربوطه برمیگرده. البته یک دلیلش هم تداخل نکردن دیتا با کاراکترهایی است که معنای خاصی دارن و برای منظور خاصی استفاده میشن.

dbdbdb
پنج شنبه 13 تیر 1392, 10:08 صبح
دوست عزیز خدمتتون عرض کردم میدونم چه جوری استفاده میشه و بارها استفاده کردم
سوال الان من اینه که چرا وقتی از QueryString استفاده میکنیم بعضی کاراکترها نیاز به encoding داره؟یا به قول شما کاراکتر حساس هست!!!!

واقعا کد ها رو چک کری؟؟؟

اصلا چک کردی من چرا واس Ali&amir چرا از encoding استفاده کردم و اگه استفاده نمیکردم جای ali&amir فقط بهم ali رو میداد واس اینکه در حالت عای & جزو کاراکتر های جدا کننده درqueryString
از این واضح تر نمیتونم بگم دگه,شما ببخشید

موفق باشید

ahmad156
پنج شنبه 13 تیر 1392, 11:33 صبح
خب بخاطر اینکه در استانداردهای مربوطه کاراکترهایی که میتونن در URL درج بشن محدودیت دارن. بنابراین یکسری کاراکترها (یا بهتره بطور کلی تر بگیم مقادیر بایتی) رو نمیشه بطور مستقیم در URL درج کرد و باید از فرم Encode شدهء اونا استفاده کرد که در این فرم تبدیل شده دیگه کاراکتر غیرمجازی وجود نداره.

حالا اینکه چرا کاراکترها محدودیت دارن خب خودش به مسائل فنی و تمهیدات طراحی استانداردها و پروتکل های مربوطه برمیگرده. البته یک دلیلش هم تداخل نکردن دیتا با کاراکترهایی است که معنای خاصی دارن و برای منظور خاصی استفاده میشن.
ممنون از توضیحتون
منبعی در این رابطه ندارین یا اگر خودتون بیشتر توضیح بدین که چه بهتر!:لبخندساده:

eshpilen
پنج شنبه 13 تیر 1392, 11:57 صبح
چه منبعی؟
این یه مفهوم و مورد ساده است.
توی همون مستندات کتابخانه های برنامه نویسی مربوطه هم احتمالا توضیحات یا اصطلاح و سرنخ هایی هست.
یه سرچ و گوگل و ویکیپدیا بکنی حله.
چیز خاصی نداره.
نمونه میخوای مثلا: http://en.wikipedia.org/wiki/Percent_encoding

anvar
پنج شنبه 13 تیر 1392, 13:24 عصر
قضیه استفاده از انکدینگ خیلی ساده است. فرض کنیم شما صفحه ای داری که کاربران می توانند نظرات و پیشنهادات خودشون رو ارسال کنن, سایر کاربران هم می تونن نظرات مربوطه را ببینند. در اینجا اطلاعات وارد شده توسط کاربران دریافت شده و در بانک اطلاعاتی ذخیره می شوند و در پایان هم در پائین صفحه مورد نظر نشان داده می شوند. یک کاربر مریض می تواند بجای ارسال نظر خود (که متن معمولی هست) کدهای Html و جاوااسکریپت را وارد فیلد و بعنوان نظر به سمت بانک ارسال کند. البته این رو هم باید بدونی که ارسال کد html و جاوااسکریپت در زمان لود این اطلاعات در قسمت نظرات می تواند مشکل زا باشد. یعنی هر کاربری که صفحه را فراخوانی کند کد جاوااسکریپت اجرا خواهد شد و می تواند بسیار خطرناک باشد. یکی از راه حل رفع این مشکل اندکینگ ورودی های کاربر است تا از ارسال کدهای مخرب به سمت بانک (و لود دوباره آن در دفعات بعد توسط هر بازدید کننده از صفحه) جلوگیری شود.
مثال : فرض کنیم کاربر یک اسکریپت خیلی ساده مثل زیر را ارسال کند :

<script>
alert("Hello");
</script>

الان اگر بخواهیم ورودی کاربر را اینکد کنیم نتیجه بصورت زیر می شود (در اینکد کردن بعضی از کاراکترهایی که احتمال سوء استفاده دارند به معادل html خود تبدیل میشوند, لذا کارایی قبلی خود را از دست خواهند داد مثل > که معادل آن "&lt;" میشود و < که معادل آن "&gt;" می شود ) لذا بصورت زیر در می آید :
&lt;script&gt;alert(&quot;Hello&quot;)&lt;script&gt;

این کد بالا گرچه در زمان رند صفحه دقیقا مشابه با ورودی کاربر نمایش داده خواهد شد اما اینجا هیچ کارایی اجرایی نخواهد شد

برای کوئری استرینگ ها هم دقیقا مشابه همین مورده چون میشه کدهای جاوااسکریپت رو بعنوان پارامتر ورودی بهش ارسال کرد. البته در asp.net میشه در قسمت دستورات صفحات خاصیت Validaterequest رو به True ست کرد تا بصورت خودکار از ارسال کدهای مخرب در صفحات جلوگیری کرد. برای کل پروژه می تونی همین مقدار رو در وب کانفیگ ست کنی.