تمام سوالات سوالات بدون پاسخ سوال بپرسید

سلام به همگی
من در یک برنامه Ruby-on-Rails یک جستجو با استفاده از تکنیک AJAX پیاده سازی کردم.
برنامه به خوبی برای نوشته‌های انگلیسی جواب میده. اما مساله‌ای که هست اینه که در هنگام جستجوی یک عبارت فارسی کنسول جاوااسکریپت مرورگر، خطای زیر رو میده:

GoogleChrome:
URIError: URI malformed

FireFox Browser (FireBug):
malformed URI sequence
if (value != undefined) value = decodeURIComponent(value);

کدی که در View نوشته شده بصورت زیر است:

<div id="search_textbox">
    <%= text_field_tag("query", params['query'], :autocomplete => 'off') %>

  </div>

<%= observe_fields ['query', 'option'],
:frequency => 1,
:update => 'information',
:before => "Element.show('loader')",
:success => "Element.hide('loader')",
:url => {:action => 'search_ajax'} %>

و کد جاوااسکریپت بصورت زیر است:

toQueryParams: function(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return { };

    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var key = decodeURIComponent(pair.shift());
        var value = pair.length > 1 ? pair.join('=') : pair[0];
        if (value != undefined) value = decodeURIComponent(value);

        if (key in hash) {
          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
          hash[key].push(value);
        }
        else hash[key] = value;
      }
      return hash;
    });
  }
1 پاسخ

چیزی که واضحه مشکل در نوع encode و decode کردن حروف هست.
باید ببینی که حروف فارسی شما به چه شکلی encode شده . تابع decodeURIComponent زمانی درست جواب میده که حروف فارسی با encodeURIComponent به کد تبدیل شده باشند. فکر کنم بهتر باشه مثالی بزنم :

encodeURIComponent("®") // "%C2%AE"
decodeURIComponent("%C2%AE") // "®"

escape("®") // "%AE"
decodeURIComponent("%AE") // URIError: URI malformed

مشخصه که نوع کد کردن حروف در تابع escape فرق داره . پیشنهاد من اینه که جای متد decodeURIComponent از متد unescape استفاده کنید ، احتمالا مشکلتون حل بشه .
موفق باشید

ممنون، ظاهرا متد decodeURIComponent و decodeURI جایگزین unescape شده‌اند و در آینده مرورگرها ممکن است دیگه از متد unescape پشتیبانی نکنند. مشکل من با unescape حل شد ولی نگرانم که در آینده دیگه سایتم کار نکنه. ممنون

(12 نوامبر '12, 14:56) _Ant Eater_
toggle preview



آموزش زبان برنامه نویسی C#
آموزش jquery
آموزش برنامه نویسی
آموزش طراحی وبسایت
آموزش مدیریت وبسایت
آموزش جاوا Java
آموزش پایتون Python
آموزش سی شارپ C#‎
آموزش HTML و CSS
آموزش JavaScript جاوااسکریپت
آموزش jQuery جی کوئری
آموزش ساخت ربات تلگرام
آموزش برنامه‌نویسی PHP
آموزش برنامه‌نویسی اندروید
● آموزش‌های رایگان

سوالات مرتبط

راهنمای استفاده از ویرایشگر
  • *ایتالیک*‌ یا __ایتالیک__
  • **ضخیم** یا __ضخیم__
  • آدرس:[متن](http://url.com/ "عنوان")
  • عکس?![alt متن](/path/img.jpg "عنوان")
  • لیست عددی: 1. Foo 2. Bar
  • برای رفتن به خط بعد، هر جا مایلید که خط جدید شروع شود دو کاراکتر فاصله (space) قرار دهید
  • تگ‌های ساده HTML هم پشتیبانی می‌شوند

تگها:
  • ×65
  • ×49
  • ×14
  • پرسیده شده: 06 نوامبر '12, 13:26
  • بازدید: 2,588 بار
  • آخرین بروزرسانی: 12 نوامبر '12, 14:56

این سوال را دنبال کنیدتوسط ایمیل: ایمیل شما (باید معتبر باشد, هرگز به دیگران نمایش داده نمیشود):

هنگامی که شما به سیستم وارد شوید،قادر خواهید بود برای بروز رسانی ها مشترک شوید.


توسط RSS:

پاسخها

پاسخها و نظرها