آژانس هواپیماییexchanging

یه راه حل کلی باسه substr برای جملات فارسی !

شروع موضوع توسط shayanblue ‏2 فوریه 2006 در انجمن PHP

  1. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    همون طور که همگی میدونیم substr برای استفاده ء فارسی در حالت معمولی جمله رو ضخمی میکنه من برای charset=windows-1256 این اسکریپت رو آماده کردم کسی از دوستان راه حل کلی به ذهنش میرسه هرکی هرچی میدونه همین جا مطرح کنه .


    PHP:

    <html dir="rtl">
    <?PHP

    $n 
    "40";

    $n $n*4;

    $var "سلام به همه ی ایرانیان عزیز خارج از کشور.";

    if (
    strlen($var) > $n){

        
    $var1 substr($var0$n);

        
    $var2 substr($var1, -11);

        while (
    $var2 != ";"){

            
    $n++;

            
    $var1 substr($var0$n);

            
    $var2 substr($var1, -11);

        }

        echo 
    "<font face=\"Tahoma\" style=\"font-size: 9pt\">".$var1."...</font>";

    }else{

        echo 
    $var;
    }

    ?>
    </html>

     
  2. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    یعنی هیچ کدوم از دوستا راه حل منطقی به ذهنشون نمیرسه دوستانی که پروژه های فارسی انجام دادن آقا سالار شما باسه کاراتون در برخورد با این قضیه چه را حلی پیشنهاد میدین؟ سایر دوستان اگه کمکی از دستون بر میاد مطرح کنین.
     
  3. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    فکر کنم قبلا یه مقاله در این زمینه خوندم فکر کنم توی iranphp بود می گردم اگه پیدا شد لینکش رو می زارم
     
  4. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
  5. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    آرش جان از بابت لینک ممنونم این اسکریپت رو قبلآ دیدم مشکلش اینه که فقط php5 این اسکریپت رو ساپورت میکنه میخوام ببینم راه حل کلی تری باسه این قضیه وجود نداره ؟ کسی چیز دیگه ای به ذهنش نمیرسه بیاد مطرح کنهcarp3 معمولآ راه کارای خوبی مطرح میکنه در رابطه با این مسئله پیشنهاد خاصی ندارین !!! :f34r:
     
  6. miladmovie

    miladmovie مدیر بازنشسته کاربر فعال

    تاریخ عضویت:
    ‏25 دسامبر 2002
    نوشته ها:
    1,936
    تشکر شده:
    2
  7. appbannerkhuniresbanner
  8. Parsa_361

    Parsa_361 کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏5 آگوست 2005
    نوشته ها:
    889
    تشکر شده:
    10
    محل سکونت:
    Isfahan, php.ini
    خوب من یه راه حل به ذهنم رسید ! :D
    بیاین نوشته رو به کد اسکی یا کد HTML تبدیل کنیم و بعد هر کاری خواستیم روش انجام بدیم !
    اینجوری وابستگی نوشته ی ما خیلی میاد پایین !
    فکر کنم کد HTML بهتر باشه. مثلاً :
    کد:
    ب = &#1576 ;
    :D
    اگه دنبالش بگردی شاید تابعش باشه وگرنه باید دستی بنویسی :D

    خوب بید ؟
     
  9. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    آره پارسا جان خوب بید ! ولی چیزی رو که شما بش اشاره کردین من دقیقآ تو پست اولم گذاشتم منتها کد html من تو متن بالا چاپ شده ببینین من برای کد html این کارو انجام دادم با توجه به این که هر کدوم از حروف فارسی هنگام کد شدن به چند کد دیگه تبدیل میشن رو همین حساب من طول رشته ای رو که می خواستم برش بخوره رو در 4 ضرب کردم بعد آخرین کاراکتر رشته رو بررسی کردم که حتمآ با ; تموم بشه، اگه رشته با ; تموم بشه که حرف آخر براش مشکلی پیش نمیاد برای حالتی هم که رشته با ; تموم نشه! از یه حلقه استفاده کردم که اونقدر به طول رشته اضافه کنه تا به ; برسه و حرف آخر هم ضخمی نشه !!! ولی من میخوام ببینم راه حل کلی تری باسه این قضیه هست ؟
     
  10. aliabdi22

    aliabdi22 Registered User

    تاریخ عضویت:
    ‏30 مارس 2005
    نوشته ها:
    170
    تشکر شده:
    4
    سلام دوست عزیز
    راهی که شما پیشنهاد دادی به خیلی جهات جالب نیست
    نظرت در باره این راه چیه:
    <?print substr($text,-strlen($text),20); ?><?if(strlen($text)>20) echo ",..." ;?>
    تو این خط اگه جمله ما بیش از 20 کارکتر یا ده کارکتر فارسی (هر حرف فارسی میشه دو بایت) داشته باشه بقیش با یک علامت "," و سه نقطه پر میشه . نکته اینجاست که اون علامت اولش باعث میشه هر کلمه فارسی حتا به یه "," ختم شه و هرگز صدمه نبینه.
    این راه خوب جواب می ده البته اگه راه جالب تری باشه تو نسخه 4 میشه امتحانش کرده و نتیجشو دید
    وقتتون خوش;)
     
  11. shankimout

    shankimout Registered User

    تاریخ عضویت:
    ‏17 می 2004
    نوشته ها:
    1,491
    تشکر شده:
    3
    محل سکونت:
    ساری . . . . . . . . . . . . . . Permanently Bann
    راه حل شما این تابع هست . که خودم برای فارسی امادش کردم . این تابع کلمه هارو جدا میکنه و بعد ...

    یعنی همیشه اخرین کلمه کامل خارج میشه

    PHP:
         function str_limit($title$chars = -1$strip_tags True)
              {
              global 
    $DSConfig,$DSS;
                if(
    $strip_tags$title strip_tags($title);
                   if (
    $chars == -1)
                   {
                        
    $chars $DSConfig['main']['str_limit_size'];
                   }
                   if (
    $chars)
                   {
       
                        
    $titlearr preg_split('#(\r\n|\n|\r)#'$title);
                        
    $title '';
                        
    $i 0;
                        foreach (
    $titlearr AS $key)
                        {
                             
    $title .= "$key\n";
                             
    $i++;
                             if (
    $i >= 10)
                             {
                                  break;
                             }
                        }
                        
    $title trim($title);
                        unset(
    $titlearr);
              
                        if (
    strlen($title) > $chars)
                        {
                           
                             return 
    substr($title0strrpos(substr($title0$chars), ' ')) . '...';
                        }
                        else
                        {
                             return 
    $title;
                        }
                   }
                   else
                   {
                        return 
    $title;
                   }
              }
     
     
  12. shankimout

    shankimout Registered User

    تاریخ عضویت:
    ‏17 می 2004
    نوشته ها:
    1,491
    تشکر شده:
    3
    محل سکونت:
    ساری . . . . . . . . . . . . . . Permanently Bann
    البطه حواسم نبود که متغیر هایی که درش استفاده کردم رو درست کنم ولی تابلو .
     
  13. aliabdi22

    aliabdi22 Registered User

    تاریخ عضویت:
    ‏30 مارس 2005
    نوشته ها:
    170
    تشکر شده:
    4
    ممنون خیلی کارش عالیه. :)
     
  14. avajang.com .leftavajang.com.right
  15. first saeed

    first saeed Registered User

    تاریخ عضویت:
    ‏25 آگوست 2005
    نوشته ها:
    813
    تشکر شده:
    2
    محل سکونت:
    PubliC_HtmL
    ابراهیم جان میشه راجع به طرز کار این تابع یه کم توضیح بدی ؟ من نتونستم کار کنم باش :eek:
     
  16. shahkey

    shahkey Registered User

    تاریخ عضویت:
    ‏16 نوامبر 2005
    نوشته ها:
    1,232
    تشکر شده:
    4
    یه راه حل دیگه هم هست!

    اول urlencode کنیم بعد جدا کنیم
     
  17. first saeed

    first saeed Registered User

    تاریخ عضویت:
    ‏25 آگوست 2005
    نوشته ها:
    813
    تشکر شده:
    2
    محل سکونت:
    PubliC_HtmL
    چیو ؟! [​IMG]
     
  18. shahkey

    shahkey Registered User

    تاریخ عضویت:
    ‏16 نوامبر 2005
    نوشته ها:
    1,232
    تشکر شده:
    4
    چی چیو؟!!!
     
  19. first saeed

    first saeed Registered User

    تاریخ عضویت:
    ‏25 آگوست 2005
    نوشته ها:
    813
    تشکر شده:
    2
    محل سکونت:
    PubliC_HtmL
    هیچیو ! [​IMG]
    من فکر کردم تابع رو گفتی !
    نه طرز استفاده از این تابع رو می خوام بدونم چطوریه فقط !
     
  20. shahkey

    shahkey Registered User

    تاریخ عضویت:
    ‏16 نوامبر 2005
    نوشته ها:
    1,232
    تشکر شده:
    4
    این urlencode هم که گفتم خوبه ها!

    مثلا جایی که می خوایم ببریم با علامت + تو urlencode مشخص میشه!
     
  21. first saeed

    first saeed Registered User

    تاریخ عضویت:
    ‏25 آگوست 2005
    نوشته ها:
    813
    تشکر شده:
    2
    محل سکونت:
    PubliC_HtmL
    اینم جالب بود دستت درد نکنه !
     
  22. alik

    alik کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏23 سپتامبر 2005
    نوشته ها:
    2,148
    تشکر شده:
    1,226