برگزیده های پرشین تولز

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

shayanblue

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


PHP:
<html dir="rtl">
<?PHP

$n = "40";

$n = $n*4;

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

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

	$var1 = substr($var, 0, $n);

	$var2 = substr($var1, -1, 1);

	while ($var2 != ";"){

		$n++;

		$var1 = substr($var, 0, $n);

		$var2 = substr($var1, -1, 1);

	}

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

}else{

	echo $var;
}

?>
</html>
 

shayanblue

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

shayanblue

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

Parsa_361

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

خوب بید ؟
 

shayanblue

کاربر تازه وارد
تاریخ عضویت
18 مارس 2005
نوشته‌ها
14
لایک‌ها
6
سن
40
محل سکونت
localhost
به نقل از Parsa_361 :
خوب من یه راه حل به ذهنم رسید ! :D
بیاین نوشته رو به کد اسکی یا کد HTML تبدیل کنیم و بعد هر کاری خواستیم روش انجام بدیم !
اینجوری وابستگی نوشته ی ما خیلی میاد پایین !
فکر کنم کد HTML بهتر باشه. مثلاً :
کد:
ب = &#1576 ;
:D
اگه دنبالش بگردی شاید تابعش باشه وگرنه باید دستی بنویسی :D

خوب بید ؟

آره پارسا جان خوب بید ! ولی چیزی رو که شما بش اشاره کردین من دقیقآ تو پست اولم گذاشتم منتها کد html من تو متن بالا چاپ شده ببینین من برای کد html این کارو انجام دادم با توجه به این که هر کدوم از حروف فارسی هنگام کد شدن به چند کد دیگه تبدیل میشن رو همین حساب من طول رشته ای رو که می خواستم برش بخوره رو در 4 ضرب کردم بعد آخرین کاراکتر رشته رو بررسی کردم که حتمآ با ; تموم بشه، اگه رشته با ; تموم بشه که حرف آخر براش مشکلی پیش نمیاد برای حالتی هم که رشته با ; تموم نشه! از یه حلقه استفاده کردم که اونقدر به طول رشته اضافه کنه تا به ; برسه و حرف آخر هم ضخمی نشه !!! ولی من میخوام ببینم راه حل کلی تری باسه این قضیه هست ؟
 

aliabdi22

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

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
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($title, 0, strrpos(substr($title, 0, $chars), ' ')) . '...';
                    }
                    else
                    {
                         return $title;
                    }
               }
               else
               {
                    return $title;
               }
          }
 

first saeed

Registered User
تاریخ عضویت
25 آگوست 2005
نوشته‌ها
815
لایک‌ها
2
سن
41
محل سکونت
PubliC_HtmL
راه حل شما این تابع هست . که خودم برای فارسی امادش کردم . این تابع کلمه هارو جدا میکنه و بعد ...

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

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($title, 0, strrpos(substr($title, 0, $chars), ' ')) . '...';
                    }
                    else
                    {
                         return $title;
                    }
               }
               else
               {
                    return $title;
               }
          }

ابراهیم جان میشه راجع به طرز کار این تابع یه کم توضیح بدی ؟ من نتونستم کار کنم باش :eek:
 

shahkey

Registered User
تاریخ عضویت
16 نوامبر 2005
نوشته‌ها
1,235
لایک‌ها
5

first saeed

Registered User
تاریخ عضویت
25 آگوست 2005
نوشته‌ها
815
لایک‌ها
2
سن
41
محل سکونت
PubliC_HtmL
چیو ؟!
24.gif
 

first saeed

Registered User
تاریخ عضویت
25 آگوست 2005
نوشته‌ها
815
لایک‌ها
2
سن
41
محل سکونت
PubliC_HtmL
هیچیو !
21.gif

من فکر کردم تابع رو گفتی !
نه طرز استفاده از این تابع رو می خوام بدونم چطوریه فقط !
 

shahkey

Registered User
تاریخ عضویت
16 نوامبر 2005
نوشته‌ها
1,235
لایک‌ها
5
هیچیو !
21.gif

من فکر کردم تابع رو گفتی !
نه طرز استفاده از این تابع رو می خوام بدونم چطوریه فقط !
این urlencode هم که گفتم خوبه ها!

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