واضح آرشیو وب فارسی:سایت ریسک: نشان دادن قسمت محدودی از اول رشته Salman_MP 23 خرداد 1385, 21:15سلام اینو نوشتم چون لازمش داشتم. بعد یادم اومد که چند بار اینجا یه چیزایی خونده بودم که دوستان با نوشتنش مشکل داشتن. مثلاْ چون کاراکترهای یونیکد دوبایتی هستن اگر از وسط قطعشون کنیم یه چیزای الکی نشون میده که کاراکترهای نمایشی نیستن !؟ حالا اینو ببینین و اگر ایرادی هم داشت بگین . یه ایرادی که داره اینه که طول رشته های یونیکد رو نصفه حساب میکنه یعنی اگر بگی به طول ۲۰ و تلورانس ۴ به طول 10 و تلورانس 2 حساب میکنه ... function cut_str($str, $length, $tolerance) { $length --; $len = strlen($str); if ($length > $len) return $str; else { $i = $length - $tolerance; if($i < 0) $i = 0; while($i <= ($length + $tolerance)) { if(ctype_space($str[$i])) return substr($str, 0, $i)." ..."; else $i++; } if(ctype_alnum($str[$i])) return substr($str, 0, $i)." ..."; else return substr($str, 0, $i-1)." ..."; } } هادی ابراهیمی 24 خرداد 1385, 02:05فکر کنم فضای خالی وسط رشته هست منهم به این مشکل خورده بودم قبل از اینکه با تابع substr کار کنی فضای خالی حذف کن و تست کن NabiKAZ 24 خرداد 1385, 19:05درست همين موضوع رو قبلا اينجا ديده بودم که يه کسي يه سورس گذاشته بود براي رفع اين مشکل ... اما مدتي بعد که بهش نياز پيدا کردم هر چي گشتم چيزي پيدا نکردم ! يه تاپيک هم زدم که کسي اين تاپيک رو نديده ؟! که تاپيک خودم قفل شد ! حالا خوشحالم که مجدد اين بحث پيش اومد ، کسي نميدونه اون تاپيک کجاست ؟! Salman_MP 25 خرداد 1385, 02:13فکر کنم فضای خالی وسط رشته هست منهم به این مشکل خورده بودم قبل از اینکه با تابع substr کار کنی فضای خالی حذف کن و تست کن ممنون ولی منظورت اینه که نباید فضای خالی رو جزو رشته به حساب بیارم ؟ (خوب این مشکلی نیست) اگر کسی در مورد اون مشکلی که خودم گفتم نظری داره بگه که درستش کنم. هادی ابراهیمی 26 خرداد 1385, 00:20قبل از اینکه با تابع substr کار کنی فضای خالی حذف کن و تست کن حتماً میدونی که چیجوری حذف کنی :wink: Salman_MP 28 خرداد 1385, 03:47حتماً میدونی که چیجوری حذف کنی :wink: اوه ... حالا فهمیدم منظورت چیه ؟ یعنی میگی اول فضاهای خالی رو پاک کنم بعدش ...... ok. اگه منظورت white space ه که نه یه همچین چیزی نیست. این مشکل برای اینه که کاراکترای یونیکد دو بایتی هستن . در ضمن اینجوری فضای خالی رو پاک می کنم : function full_trim($str) { $var = preg_split("/s+/", $str); for($i=0; !empty($var[$i]); $i++) $res .= $var[$i]; return $res; } خوبه ؟ البته اینو همین جا نوشتم و کد قابل اعتمادی نیست. ولی اگه درست کار کنه هر چی white space هست میریزه دووور D: هادی ابراهیمی 01 تير 1385, 22:32من با دستور full_trim آشنایی ندارم ولی میدونم trim فقط کارکتر خالی ابتدا وانتها رشته را حذف میکنه برای حذف مابین کلمات دستوری دیگری هست یادم نیست ولی برات پیدا میکنم حلا نمیتونی برای نشوندن قسمتی از رشته، کارکتر خاصی مثل * یا - بهش اضافه کنی تو در موقع نمایش با دستور substr فقط تا اون کارکتر نمایش بدی تا اینکه بیای طول رشته حساب کنی و بعد بقیه .... هادی ابراهیمی 01 تير 1385, 22:44من با دستور full_trim آشنایی ندارم ولی میدونم trim فقط کارکتر خالی ابتدا وانتها رشته را حذف میکنه برای حذف مابین کلمات دستوری دیگری هست یادم نیست ولی برات پیدا میکنم حلا نمیتونی برای نشوندن قسمتی از رشته، کارکتر خاصی مثل * یا - بهش اضافه کنی تو در موقع نمایش با دستور substr فقط تا اون کارکتر نمایش بدی تا اینکه بیای طول رشته حساب کنی و بعد بقیه .... Salman_MP 03 تير 1385, 22:021- اون تابع full_trim رو خودم نوشتم و یه تابع کتابخونه ای (!) نیست. 2- در مورد پیشنهادت باید بگم که راه خوبی نیست چون دو راه ممکنه که پیشنهاد بشه : اولی اینکه از هر فیلد متنی که میخام یه قسمتیش رونوشون بدم دو تا نگه دارم . یکی با * و یکی دیگه بدون * دومی اینکه یکی نگه دارم و هر موقع میخام نشون بدم اون کاراکتر کدایی(*) رو پاک کنم (در این حالت باید مطمئن باشم که جای دیگه ای این کاراکتر ظاهر نشده) بعدشم اگه یه وقت تصمیم گرفتم به جای 10 حرف مثلاً 15 حرف نشون بدم باید برم تمام رشته ها رو به روز کنم و لی در این حالت هیچکدوم از مشکلای فوق الذکر وجود نداره. هادی ابراهیمی 09 تير 1385, 10:44ولی substr کارکتر بعد از * ذخیره میکنه در ضمن بدون * همچنین میتونی توی یک آرایه ذخیره کنی که دسترسی و سرچ توشراحت باشه به حر حال این یک نظر koobagher 10 تير 1385, 15:20من هم اين مشكل را دارم چگونه مي توانم رشته هاي فارسي را در PHP با استفاده از توابع لازم جدا يا كوتاه كنم. با توجه به اينكه مي خواهم رشته هاي فارسي را كه در فورمها submit مي شوند در بانكهاي MySQL ذخيره كنم و نياز داشتم طول رشته هاي فارسي را براي فيلد مربوطه كوتاه كنم ولي متوجه شدم اين رشته ها دو بايتي بوده و به علاوه تابع substr هم در مورد آنها درست كار نمي كند. خواستم از تابع mb_substr استفاده كنم ولي web server اين توابع را ساپورت نمي كند و لازم است ابتدا ماژول مربوطه در سرور توسط ميزبان نصب شود. لطفا بگوييد چگونه كاري كنم كه رشته هاي فارسي در فورمها يك بايتي شوند و دوم اينكه چگونه رشته هاي فارسي دو بايتي را پردازش كنم
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 340]