PDA

View Full Version : سوال: برداشتن 30 کاراکتر اول هر رشته !؟



as13851365
پنج شنبه 25 مهر 1387, 14:24 عصر
بانک mysql :متفکر:

من چند فیلد از نوع text دارم که می خوام در یک صفحه از هر فیلد فقط 30 کاراکتر اول رو نشون بدم

آیا راه ساده ای وجود دارد ؟ ( مثلا تابعی یا دستوری !!! )

من از دستور از کد زیر استفاده کردم ولی نمی دونم چرا رشته رو به صورت صحیح نشون نمی ده !

$s="زندگی درک همین امروز است";
$s=str_split($s,30);
echo "<a href=\"index.php?id=$a[id]\"><img src=\"akse/right1.png\" border=\"0\"/>&nbsp;$s[0]</a><br />";


خروجی : ( * گی درک همین اټ/a> )
مشکلی که دارم اون آخر کلمه یعنی اټ/a> است ! :عصبانی++:

سوال : آیا راه ساده تری برای نمایش 30 کاراکتر اول رشته وجود داره !!

امید امرایی
پنج شنبه 25 مهر 1387, 14:45 عصر
از substr (http://ir.php.net/substr) استفاده کنید

amircoco
پنج شنبه 25 مهر 1387, 16:02 عصر
$a="amircoco";
$a=substr($a,0,4);
echo($a);
خروجی : amir

mhmmdshirazi
پنج شنبه 25 مهر 1387, 18:36 عصر
ببین هر خط html رو تو یک echo بنویس و بجای "از 'استفاده کن در این حالت قبل از علامات نیاز به گذاشتن \ نیست.

vahid4134
جمعه 26 مهر 1387, 12:04 عصر
از substr (http://ir.php.net/substr) استفاده کنید
البته استفاده از substr برای فارسی مشکلات زیادی رو داره و هر کلمه فارسی برابر دو کاراکتر هست (به دلیل خاصیت utf8 بودن بهتره از mb_substr استفاده کنی

as13851365
شنبه 27 مهر 1387, 07:54 صبح
مشکل هنوز پابرجاست نه با تابع substr حل شد نه با تابع mb_substr

یعنی با این دو تابع به نتیجه ای که می خوام می رسم ( برداشتن 30 کاراکتر اول هر رشته )

ولی باز مشکل

مشکلی که دارم اون آخر کلمه یعنی((( اټ/a> ))) است !
پابرجاست
این هم از کد صفحه ی من ( یه نمونه ) یه صفحه با یونیکد UTF-8 ایجاد کنید و کد زیر رو توش قرار بدید و اجرا کنید ( وقتی که رشته کاراکترهای [] رو داره همان مشکلی که گفتم ایجاد می شه (اټ/a>)

<?php
$s='زندگی درک امروز و فردا است';
echo '<hr>'.$s.'<hr>';
echo mb_substr($s,0,30);
echo '<hr>';
echo substr($s,0,30);
echo '<hr>';
?>

وقتی که این کد رو اجرا می کنم دستور echo '<hr>' رو چاپ نمی کنه یعنی اجراش نمی کنه و خود رشته رو چاپ می کنه

خروجی این کد به صورت زیر است
((( زندگی درک امروز ټhr>زندگی درک امروز ټhr> )))

برای حلش چه راهی رو پیشنهاد می کنید ؟

یه سوال : من کل صفحه هاتم رو با Unicode UTF-8 ذخیره کردم آیا مشکلی ایجاد نمی کنه !!!

اعظم
شنبه 27 مهر 1387, 12:40 عصر
این مشکل درمورد فارسی وجود دارد کاری که من در یک پروژه کردم این بود که بهعنوان مثال بعد از جدا کردن 30 کرکتر برای اینکه کرکترهای نامفوم آخر رو حذف کنم دنبال آخرین کرکتر فاصله ار آخر عبارت گشتم و سپس عبارت رو از کرکتر اول تا کرکتر فاصله جدا کردم .

اینم کدش ( البته در مثال زیر 400 کرکتر اول از متن جدا شده )

if (strlen($Pm_Text)>400)
{
$s1=substr($Pm_Text,0,400);
$d1=strrpos($s1,' ');
$s2=substr($s1,0,$d1);
}
else
{
$s2=$Pm_Text;
}

امیدوارم کمکت کنه

as13851365
شنبه 27 مهر 1387, 13:17 عصر
دستت درد نکنه مشکل من رو حل کردی .

$s=$a[title];
if (strlen($s)>30)
{
$s1=substr($s,0,30);
$d1=strrpos($s1,' ');
$s2=substr($s1,0,$d1);
}
else $s2=$s;
echo "<a href=\"index.php?id=$a[id]\"><img src=\"akse/right1.png\" border=\"0\"/>$s2</a><br />";



کرکترهای نامفوم آخر رو حذف کنم دنبال آخرین کرکتر فاصله ار آخر عبارت گشتم و سپس عبارت رو از کرکتر اول تا کرکتر فاصله جدا کردم
می شه کمی درباره این جمله ها توضیح بدی ؟

1 ) اون کاراکترهای نامفهوم برای چی ایجاد می شه ؟ ( اشکال از چی است ؟)

2 ) برای چی دنبال کاراکتر فاصله می گردید ؟

3 ) یعنی کاراکترهای بعد از فاصله چنین مشکلی رو ایجاد می کنند ؟

4 ) آیا این مشکل در اطلاعات وارد شده توسط کاربران هم می تونه ایجاد بشه ؟

اعظم
یک شنبه 28 مهر 1387, 20:24 عصر
1 ) به علت uf-8 بودن هر کرکتر فارسی معادل دو کرکتر جا می گیره بنابر این احتمال اینکه کرکتر 30ام تصفه بشه خیلی زیاده

2) دنبال کرکتر فاصله از آخر عبارت می گردم به این دلیل که بین کلمات فاصله است و من می خوام به آخرین کلمه که در عبارت به صورت کامل اومده برسم و احیانا اگر کلمه ای ناقص مونده حذف بشه

3) در 2 جوابش رو دادم
4) بله احتمالش هست .

:) خوشحالم که مشکلت رفع شد.