/
  • شباهت بین دو رشته

  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی شباهت بین دو رشته
    نویسنده پیام
    parvane آفلاین
    عضو مهم
    ****

    ارسال‌ها: 352
    تاریخ عضویت: ۱۳۸۷ دي ۸
    اعتبار: 12
    تشکرها : 590
    ( 424 تشکر در 242 ارسال )
    ارسال: #1
    شباهت بین دو رشته
    دوستان تابع مشابه با similar_text() برای رشته های utf8 می شناسید؟
    این تابع تعداد کاراکترهای مشابه بین دو رشته رو برمیگردونه

    برای رشته های فارسی درست عمل نمی کنه، مثال زیر رو ببینید:
    کد PHP:
    echo similar_text("سلا","سلما");
    //result is 6, it is wrong
    echo similar_text("salam","sam");
    //result is 3, it is right 
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۲۸ ۰۳:۲۶ صبح، توسط parvane.)
    ۱۳۸۸ آبان ۲۸ ۰۳:۲۴ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    pesarelor آفلاین
    عضو جدید
    **

    ارسال‌ها: 24
    تاریخ عضویت: ۱۳۸۸ مهر ۲۶
    اعتبار: 0
    تشکرها : 5
    ( 9 تشکر در 3 ارسال )
    ارسال: #2
    RE: شباهت بین دو رشته
    فکر کنم چون حروف فارسی رو دو کاراکتر حساب میکنه اینطوری شده.
    برا توابعی که با mb_ شروع میشدن هم یه مشکل همینطوری بوجود میومد که با mb_internal_encoding("UTF-8"); حل میشد.
    در صورت پیدا نشدن تابعی مشابه mb_internal_encoding("UTF-8"); شما میتونید از کد های پایین استفاده کنید.
    کد PHP:
    $tedad similar_text("تستی","تست");
    echo 
    $tedad 2
    یا :
    کد PHP:
    echo similar_text(utf8_decode("تستی"),utf8_decode("تست")); 
    ولی در کل فکر کنم یه تنظیماتی تویه php.ini باید انجام بشه تا utf-8 زبان پیش فرض بشه و همه توابع برای زبان فارسی بدون مشکل کار کنن
    __________________________________________________________________________
    طراحی و برنامه نویسی صفحات پویا - Iranveb.net
    پورتال جدیدترین اخبار داخل و خارج کشور - Iranveb.com
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۲۸ ۱۰:۲۸ صبح، توسط pesarelor.)
    ۱۳۸۸ آبان ۲۸ ۱۰:۱۵ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : admin parvane Alimokhlesi HiddeN oia amir.s میلاد
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,766
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1500
    ( 1729 تشکر در 992 ارسال )
    ارسال: #3
    RE: شباهت بین دو رشته
    یک راه دیگه هم این هست. که بیاید از این تابع استفاده کنید.
    کد PHP:
    function fixPersianString($text){
           if(
    is_null($text))
              return 
    null;
           
    $replacePairs = array(
                    
    chr(0xD9).chr(0xA0) => chr(0xDB).chr(0xB0),
                    
    chr(0xD9).chr(0xA1) => chr(0xDB).chr(0xB1),
                    
    chr(0xD9).chr(0xA2) => chr(0xDB).chr(0xB2),
                    
    chr(0xD9).chr(0xA3) => chr(0xDB).chr(0xB3),
                    
    chr(0xD9).chr(0xA4) => chr(0xDB).chr(0xB4),
                    
    chr(0xD9).chr(0xA5) => chr(0xDB).chr(0xB5),
                    
    chr(0xD9).chr(0xA6) => chr(0xDB).chr(0xB6),
                    
    chr(0xD9).chr(0xA7) => chr(0xDB).chr(0xB7),
                    
    chr(0xD9).chr(0xA8) => chr(0xDB).chr(0xB8),
                    
    chr(0xD9).chr(0xA9) => chr(0xDB).chr(0xB9),
                    
    chr(0xD9).chr(0x83) => chr(0xDA).chr(0xA9),
                    
    chr(0xD9).chr(0x89) => chr(0xDB).chr(0x8C),
                    
    chr(0xD9).chr(0x8A) => chr(0xDB).chr(0x8C),
                    
    chr(0xDB).chr(0x80) => chr(0xD9).chr(0x87) . chr(0xD9).chr(0x94));
           return 
    strtr($text$replacePairs);
       } 

    ین تابع یک رشته یونی‌کد را گرفته و نویسه‌های غیرفارسی موجود در آن را با نویسه‌های فارسی عوض می‌کند.
    http://www.idevcenter.com/wiki/list_of_p...characters
    http://www.idevcenter.com/wiki/list_of_n...characters
    از این تابع می‌توانید برای اصلاح رشته‌های ورودی کاربران استفاده کنید.
    ۱۳۸۸ آبان ۲۸ ۰۵:۳۹ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : amir.s میلاد parvane oia
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #4
    RE: شباهت بین دو رشته
    یه توضیح کلی در مورد این جور مشکلات بدم که مثلا چرا strlen برای کاراکترهای فارسی دو تا مقدار رو در نظر می گیره و موارد مشابه دلیل این هست که این جور توابع روی مقدار بیتی کار می کنن. و چون کاراکترهای فارسی دو بایتی هستن بنابراین همیشه دوتا درنظر میگیرن
    ۱۳۸۸ آبان ۲۸ ۰۹:۱۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : parvane
    parvane آفلاین
    عضو مهم
    ****

    ارسال‌ها: 352
    تاریخ عضویت: ۱۳۸۷ دي ۸
    اعتبار: 12
    تشکرها : 590
    ( 424 تشکر در 242 ارسال )
    ارسال: #5
    RE: شباهت بین دو رشته
    ممنون از جواب همه Smile
    فقط ببینید من الان دو تا رشته که هیچ اشتراکی ندارن رو تست کردم ولی نتیجه اش رو ببینید:
    کد PHP:
    echo similar_text(fixPersianString('با'),fixPersianString('تست')); //result is 2
        
    echo similar_text(utf8_decode('با'),utf8_decode('تست')); //result is 2 
    نتیجه رو 2 برمیگردونه، در صورتی که هیچ اشتراکی ندارن
    یا این یکی که رشته ها وجه اشتراک دارن:

    کد PHP:
    echo similar_text(fixPersianString('رتا'),fixPersianString('تست')); //result is 3
        
    echo similar_text(utf8_decode('تبا'),utf8_decode('تست')); //result is 3 
    اینجا هم 3 برمی گردونه Huh
    ۱۳۸۸ آبان ۲۹ ۰۱:۵۵ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #6
    RE: شباهت بین دو رشته
    شما با این تابع نمی تونید کار کنید چون درای روی یک بایت کار می کنه ولی فارسی دو بایتی هست. ممکنه مثلا بایت اول حرف ت با بایت دوم حرف الف یکی باشه پس یک مقدار مشابه پیدا کرده
    ۱۳۸۸ آبان ۲۹ ۰۴:۵۸ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : parvane
    parvane آفلاین
    عضو مهم
    ****

    ارسال‌ها: 352
    تاریخ عضویت: ۱۳۸۷ دي ۸
    اعتبار: 12
    تشکرها : 590
    ( 424 تشکر در 242 ارسال )
    ارسال: #7
    RE: شباهت بین دو رشته
    متد مشابه برای رشته های فارسی وجود نداره؟
    ۱۳۸۸ آبان ۲۹ ۱۰:۱۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    parvane آفلاین
    عضو مهم
    ****

    ارسال‌ها: 352
    تاریخ عضویت: ۱۳۸۷ دي ۸
    اعتبار: 12
    تشکرها : 590
    ( 424 تشکر در 242 ارسال )
    ارسال: #8
    RE: شباهت بین دو رشته
    پیشنهادی نبود؟
    ۱۳۸۸ آذر ۲ ۱۱:۴۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #9
    RE: شباهت بین دو رشته
    شما می تونید متد مشابه رو با توابع php بنویسید
    ۱۳۸۸ آذر ۳ ۰۱:۱۶ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : parvane oia
    parvane آفلاین
    عضو مهم
    ****

    ارسال‌ها: 352
    تاریخ عضویت: ۱۳۸۷ دي ۸
    اعتبار: 12
    تشکرها : 590
    ( 424 تشکر در 242 ارسال )
    ارسال: #10
    RE: شباهت بین دو رشته
    اره ظاهرا باید دست به کار بشم..تموم شد توی فروم میزارم
    ۱۳۸۸ آذر ۳ ۱۰:۳۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : amir.s HiddeN Alimokhlesi oia
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS