PDA

View Full Version : سوالی در مورد محدود کردن کلمات



ama-amir
دوشنبه 29 اسفند 1390, 20:43 عصر
سلام
خسته نباشید
دوستان من یه قسمت اخبار دارم که ادامه مطلب نداره
میخوام یه جوری تعیین کنم که موقعه echo بگم فقط 60 کاراکتر رو echo کن
و اینجوری لینک بدم به ادامه مطلب که تمام مطلب رو برن تو ادامه مطلب ببینن
ممنون میشم اگه کدی در این مورد دارید بهم بدید

MMSHFE
دوشنبه 29 اسفند 1390, 20:46 عصر
با substr 60 کارکتر اول رو جدا کنید و لینک به صفحه ادامه مطلب بدین و اونجا کاملش رو بگذارین. مثال:

echo substr($post, 0, 60);

ama-amir
پنج شنبه 03 فروردین 1391, 14:41 عصر
ممنون بابت جوابت
ولی اینو که میزنم درست حسابی کلماتو نمیاره:d
یعنی مثلا اینجوری میاره:
طرح سلامت د�

binyaft
پنج شنبه 03 فروردین 1391, 15:50 عصر
یک سرچ در مورد mb_substr بفرمایید

Reza1607
پنج شنبه 03 فروردین 1391, 15:51 عصر
http://barnamenevis.org/showthread.php?215150-snippet-%D9%87%D8%A7%DB%8C-php&p=1469052&viewfull=1#post1469052

بفرما اين هم اون تكه كدي كه مي خواين

MostafaEs3
پنج شنبه 03 فروردین 1391, 15:53 عصر
آره این خیلی خوبه ... ولی در مورد اون مشکل ، فکر کنم با htmlspecialchars یا htmlentities حل بشه



htmlentities('text',ENT_QUOTES,"UTF-8");
htmlspecialchars('text',ENT_QUOTES,"UTF-8");

ama-amir
پنج شنبه 03 فروردین 1391, 20:01 عصر
الان من یه کد گیر آوردم تقریبا همین کارو میکنه
فقط تگای html رو عینا به صورت متن پرینت میکنه
اونو چجوری میشه حل کرد؟
ممنون

MostafaEs3
پنج شنبه 03 فروردین 1391, 21:28 عصر
این دوتا تابع که من دادم کدهای اچ تی ام ال رو بی اثر میکنه ... :چشمک:

MMSHFE
جمعه 04 فروردین 1391, 00:14 صبح
ممنون بابت جوابت
ولی اینو که میزنم درست حسابی کلماتو نمیاره:d
یعنی مثلا اینجوری میاره:
طرح سلامت د�
خوب شما نگفتین برای فارسی میخواین یا انگلیسی.

یک سرچ در مورد mb_substr بفرمایید
ضمن تشکر از پاسختون، این نکته رو هم بد نیست اضافه کنم که کلاً توابع کار با رشته (تقریباً همه اونها) مثل strlen و substr و... یک نسخه برای زبانهایی که کارکترهای اونها با کد چندبایتی MultiByte اعلام میشه (سیستم کدگذاری Unicode) هم دارن که با _mb شروع میشه (مثل mb_strlen و mb_substr و...). برای سادگی، موق توضیح دادن فقط تابع اصلی بیان میشه و هرجا نیاز به کار با زبانهای یونیکد داشتین، خودتون معادل _mb اون رو استفاده کنید. موفق باشید.

ama-amir
جمعه 04 فروردین 1391, 18:18 عصر
دوستان تو اسنیپتهای پی اچ میگشتم و این تکه کد رو پیدا کردم:
function cuttext($text, $maxlen)
{
$text = htmlspecialchars($text);
if (strlen($text) > $maxlen)
{
$text = substr($text, 0, $maxlen);
$text .= " ...";
}
return $text;
}
بیشتر از بقیه کدها جواب میداد
فقط هرکاری میکنم حتی با htmlspecialchars هم کدهای html رو تو echo میاره!
ممنون میشم راهنمایی کنید
به نظرتون با جاوا اسکریپت راحت تر نیست؟
کسی راهی با جاوا اسکریپت سراغ داره؟
ممنون

binyaft
جمعه 04 فروردین 1391, 21:24 عصر
چرا از mb_substr استفاده نکردید!؟
PHP بهتر هست به نظرم ، چون در JS باید همه متن رو در کلاینت داشته باشید .

Ali0Boy
جمعه 04 فروردین 1391, 23:28 عصر
دوستان من هم همین مشکل رو تو فونت های فارسی داشتم برای همین یک تابع سرسری تعریف کردم میشه راحت ترش کرد البته تابع mb_substr رو تست نکرده ام. دوستان یه نگاهی بندازید به کد ببینید چطوره؟


function subPageMemo($str_memo="",$lenght=-1) // تابع مخصوص انتخاب قسمتی از متن
{
$int_len=strlen($str_memo); $str_rslt=""; $bln_t=false;
for($i=0;$i<$int_len;$i++)
{
if(!$bln_t && substr($str_memo,$i,1)!="<")
{ $str_rslt.=substr($str_memo,$i,1); }
else { $bln_t=true; }
if(substr($str_memo,$i,1)==">") { $bln_t=false; }
}
if($lenght<0) { $lenght=strlen($str_rslt); }
else if($lenght%2!=0) { $lenght++; }
return substr($str_rslt,0,$lenght);
}


البته از نظر قواعد کدنویسی پیشرفته خوب نیست ولی چه کنیم سرسری نوشتیم از نظر کد نویسی جالب نشده.
شاید برای اون قسمتی که % گذاشتم سوال براتون پیش بیاد. همان طور که دیدید در سوال دوستمون برای فارسی ها ؟ می گذاشت. بررسی که کردم دیدم حروف فارسی حدودا می شه گفت از یک کاراکتر بیشتر فضا می گیرن(خنده دار بود مگه نه) ولی باور کنید. من در اینجا تست کردم که اگه تگ هایی که <..> دارد را حذف کنم و بعد substr مقدار length اون رو فرد بدهم علامت سوال میاد ولی وقتی زوج هست درست کار می کنه! [البته اگر دیدید بازم علامت سوال میاد اون != رو به == تبدیل کنید حل می شه، شاید رو سیستم شما اعداد زوج رو علامت سوال بدهد اونهم شاید، چندجا تست کردم مشکل نداشت]. ممنون می شم اساتید نظرشون رو بگند. البته از نوع کدنویسی ام اشکال نگیرید چه کنیم دانش آموز شما هستیم.

MMSHFE
شنبه 05 فروردین 1391, 13:09 عصر
این تابع رو تست کنید ببینید درست میشه؟


function cuttext($text, $maxlen) {
$len = mb_strlen($text);
if($len > $maxlen) {
$text = mb_substr($text, 0, $maxlen).'...';
}
return $text;
}