parsgreen.com
article

نمایش قسمتی از متن و پاراگراف با php

php-limit-word

یکی از امکانات و در واقع تکنیک هایی که ممکن است در برنامه نویسی صفحات وب با php کاربرد زیادی داشته باشد، انتخاب و نمایش قسمتی از یک متن یا پاراگراف است که می تواند به فرض به عنوان پیش نمایش مطالب یا اهداف دیگر مانند نمایش قسمتی از یک پاراگراف به هنگام جستجو در سایت و... مورد استفاده قرار گیرد، خوشبختانه انجام این کار بسته به شرایط و نیاز شما، به چند شیوه (از طریق توابع php یا در هنگام پرس و جو از دیتابیس) قابل انجام دادن است که در این آموزش در حد امکان به تفصیل در مورد آن خواهیم گفت.

نمایش قسمتی از پاراگراف به صورت شمارش کلمه


یکی از روش های نمایش قسمتی از متن یا پاراگراف در php، تعیین تعداد و میزان کلماتی است که قصد داریم در خروجی نشان داده شوند، برای این کار از سه تابع explode ، implode و array_splice استفاده می کنیم که در تابع زیر این سه را باهم ترکیب کرده ایم.
<?php
function limitword($string, $limit){
    $words = explode(" ",$string);
    $output = implode(" ",array_splice($words,0,$limit));
    return $output;
}
?>
برای فراخوانی تابع، کافی است پاراگراف مورد نظر را در یک متغیر تعریف و متغیر را (به عنوان آرگومان اول) به همراه تعداد کلمات مورد نظر (به عنوان آرگومان دوم) و به صورت زیر فراخوانی کنید.
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
echo limitword($string,5);
?>
به این صورت در خروجی، تنها 5 کلمه اول از مقادیر متغیر فرضی string را خواهیم داشت.
توضیح:
- تابع explode با دریافت یک مقدار آرگومان به عنوان جداکننده (در اینجا فضای خالی یا " ")، متن مورد نظر را به صورت آرایه ای از کلمات تبدیل می کند.
- در قسمت بعدی، تابع implode مجددا آرایه ها را تبدیل به یک رشته می کند، البته در اینجا array_splice باعث می شود که تنها بخش خاصی از متن مورد نظر به خروجی ارسال شود.
نکته: برای محاسبه تعداد کلمات موجود در آرایه، می توانید از sizeof هم استفاده کنید.
<?php
$words = explode(" ",$string);
echo sizeof($words);
?>
به این صورت می توانید برنامه خود را هوشمند تر سازید؛ به فرض اگر تعداد کلمات یک متن از مقادیر مورد نظر شما بیشتر بود، قسمت array_splice اجرا شود و یا ایده های دیگری که ممکن است به ذهنتان برسد.

نمایش قسمتی از متن به صورت شمارش حروف  


یک روش دیگر برای انتخاب و نمایش قسمتی از یک متن، شمارش تعداد حروفی است که تمایل داریم به همان اندازه به خروجی ارسال شود، برای انجام این کار از تابع substr می توانیم استفاده کنیم.
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
echo substr("$string", 0, 25);
?>
البته این روش برای کلمات فارسی چندان کاربردی نیست، چرا که هر حرف فارسی در تابع substr دو کاراکتر حساب می شود و از این گذشته، در این تابع گاهی مواقع کاراکترهای غیر استاندارد در انتهای متن مورد نظر به خروجی داده می شود که این موضوع به دلیل یونیکد حروف فارسی است.

نمایش قسمتی از متن و پاراگراف در MySQL


علاوه بر روش های بالا که صرفا متکی بر کدهای php و توابع آن هستند، در mysql و به هنگام پرس و جو یا همان query نیز این امکان وجود دارد که بتوانیم نتایج را محدود به تعداد کلمات خاصی کنیم، برای این کار از تابع SUBSTRING و به شکل نمونه زیر استفاده می کنیم.
<?php
$result = mysql_query("SELECT id, SUBSTRING(text,1,30) as text FROM articles ORDER BY id DESC LIMIT 1");
?>
در مثال بالا، با استفاده از تابع SUBSTRING در MySQL از جدول فرضی articles، ستون text کاراکترهای 1 تا 30 را انتخاب کرده ایم، البته این تابع نیز نسبت به حروف فارسی در مقایسه با حروف انگلیسی، رفتاری متفاوت دارد.
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» نحوه نمایش متن و تصاویر اتفاقی در php و mysql
» تبدیل تاریخ میلادی به شمسی، با استفاده از مبدل jdf در php
» ارسال ایمیل با php و کلاس phpmailer
» آموزش ساخت نقشه سایت (Sitemap) با php و xml
» محاسبه و نمایش پیج رنک گوگل با php
commentنظرات (۴۵ یادداشت برای این مطلب ارسال شده است)
نویسنده: ساناز
زمان: ۰۰:۱۷:۴۴ - تاریخ: ۱۳۹۱/۰۶/۱۶
با سلام و تشکر - خیلی سایت خوب و آموزنده ای دارید
یک مشکلی دارم .. اونم اینه که میخوام در صفحه مثلا پست وبلاگم صفحه ای از سایت رو به سورت آنلاین در کادری محدود نمایش بدم .. هرچقدر در نت گشتم راه کار مناسبی پیدا نکردم ... نمیدونم اصلا چنین کدی هست یا نه ؟ فکر میکنم باشه چون من در بعضی از سایتها دیدم که این کار رو انجام دادن یعنی مثلا صفحه اول سایت شما به شکل آنلاین در پست من در کادری محدود نمایش داده بشه ...
پاسخ: 
سلام
بله چنین تگی از پیش در html تعریف شده! به نظر مشکل شما با iframe حل می شود:
<iframe src="http://webgoo.ir" width="400" height="400" align="top" scrolling="auto" frameborder="1">
</iframe>
البته استفاده از این تگ از نظر سئو یا همان بهینه سازی برای موتورهای جستجو توصیه نمی شود، پس سعی کنید اگر هم از آن استفاده می کنید، به تعداد اندک باشد.
نویسنده: ساناز
زمان: ۱۵:۲۸:۴۶ - تاریخ: ۱۳۹۱/۰۶/۱۶
خیلی ممنون واقعا کمکم کرد ...مرسی
یه خواهش و زحمت دیگه هم دارم .. امکانش هست آموزشی در مورد قالبهای ایمیل بدید ؟ چطور میشه از یک قالب html یا یک کد html در ایمیل استفاده کرد
و یا به طور مثال چطور میشه مشابه گروه های یاهو از قالب های اختصاصی در ایمیل استفاده کرد؟
بازم از زحماتتون ممنون
پاسخ: 
سلام
برای ارسال ایمیل به صورت html لطفا آموزش زیر را مطالعه کنید:
ارسال ایمیل با php و کلاس phpmailer
می توانید برای تنظیمات ظاهری ایمیل هم از style css خطی استفاده کنید.
نویسنده: ساناز
زمان: ۲۰:۴۶:۴۷ - تاریخ: ۱۳۹۱/۰۶/۱۷
سلام .... با تشکر فراوان از زحمات شما
راستش مطلب (ارسال ایمیل با php و کلاس phpmailer) رو کامل خوندم ولی نتونستم ازش استفاده کنم کم و بیش از html سر رشته دارم ولی از php هیچی ... منظور من همون شکل ظاهری ایمیل ها بود حتما شما هم عضو گروپ های یاهو هستید ... ایمیل هایی که از طرف گروپ ها میان معمولا دارای قالب بندی هستند ... من دنبال اونم هستم
میتونید کمکم کنید ...
ممنون
پاسخ: 
سلام
برای ارسال ایمیل به صورت html از طریق outlook در هنگام ارسال ایمیل جدید، از قسمت format گزینه Rich Text را انتخاب کنید و کد html خود را در حالتی که Source (از سربرگ های پائین سمت چپ) صفحه انتخاب شده باشد، درج کنید.
در یاهو یا جی میل تا جایی که اطلاع داریم چنین امکانی تنها در حد ویرایشگر ارسال ایمیل آنها قابل انجام دادن است، یعنی در حد رنگ بندی، نوع فونت، اندازه و...
نویسنده: حسین
زمان: ۱۹:۳۵:۲۲ - تاریخ: ۱۳۹۱/۱۲/۲۹
سلام. ببخشید استاد. یک سوال دارم. من میخوام متن قسمتی از یک صفحه وب رو با یک آدرس مشخص بگیرم و قسمتی از متن رو بردارم.حالا مثلا همین صفحه، میخوام این تیکه رو بردارم:
پاسخ:
سلام
برای ارسال ایمیل به صورت html از طریق outlook در هنگام ارسال ایمیل جدید، از قسمت format گزینه Rich Text را انتخاب کنید و کد html خود را در حالتی که Source (از سربرگ های پائین سمت چپ) صفحه انتخاب شده باشد، درج کنید.
در یاهو یا جی میل تا جایی که اطلاع داریم چنین امکانی تنها در حد ویرایشگر ارسال ایمیل آنها قابل انجام دادن است، یعنی در حد رنگ بندی، نوع فونت، اندازه و...
همچین چیزی رو که خیلی دیدم اما نمیدونم چطور. میشه کمک کنید؟
در ضمن عیدتون هم مبارک
پاسخ: 
سلام
می توانید با تابع file_get_contents صفحه مورد نظر را فراخوانی کنید، سپس با تجزیه تگ های صفحه، مقادیر داخل آنها را استخراج نمائید، به طور مثال کد زیر عنوان صفحه را استخراج می کند:
$content = file_get_contents('http://webgoo.ir');
$title = preg_match("/<title[^>]*>(.*?)<\\/title>/ims", $content, $match);
echo $match[1];
در واقع برای بدست آوردن قسمتی از یک صفحه، باید کلیدهای تجزیه داشته باشید، به فرض در اینجا تگ title کلید تجزیه است و می توانیم به کمک آن محتوای داخل این تگ را استخراج کنیم، این کلید تجزیه می تواند آی دی بلاک مورد نظر یا هر چیز دیگری باشد که در صفحه به صورت یکتا وجود دارد.
نویسنده: حسین
زمان: ۱۴:۴۴:۰۱ - تاریخ: ۱۳۹۲/۰۱/۰۳
سلام. از زحماتتون واقعا تشکر می کنم استاد!!
خب درسته. دقیقا همون چیزی که میخواستم. میشه یکم بیشتر کمک کنید؟ حالا اگه خواستم یه تگ div رو با کلاسش فراخونی کنم، چیکار کنم؟
پاسخ: 
سلام
ساده است، مطابق نمونه به جای title از بلاک div و نام کلاس (با رعایت syntax صحیح php) استفاده کنید، مثال:
<?php
$content = file_get_contents('http://webgoo.ir');
$title = preg_match("/<div class=\"footer-txt\"[^>]*>(.*?)<\\/div>/ims", $content, $match);
echo $match[1];
?>
نویسنده: حسین
زمان: ۱۴:۵۸:۰۱ - تاریخ: ۱۳۹۲/۰۱/۰۵
سلام. یک سوال دیگه هم دارم. اگه بخوام قسمتی از کدهای دریافتی رو خذف کنم، مثلا داخل یک جدول یک تگ tr رو حذف کنم، همچین کاری رو میشه کرد؟
پاسخ: 
سلام
بله به روش های مختلف این کار امکان پذیر است، ساده ترین حالت استفاده از تابع str_replace است:
<?php
$content = file_get_contents('http://webgoo.ir');
$content = str_replace('<tr>', '', $content);
$title = preg_match("/<div class=\"footer-txt\"[^>]*>(.*?)<\\/div>/ims", $content, $match);
echo $match[1];
?>
نویسنده: مازیار
زمان: ۱۸:۳۵:۰۱ - تاریخ: ۱۳۹۲/۰۳/۰۹
سلام
یک سوال داشتم
فرض کنیم یک متن داریم و داخل این متن (text...) وجود دارد می خواهم توسط php متن داخل پرانتز شناسایی و جدا شود یعنی ) یک عنصر کلیدی برای شناسایی باشد در صورت امکان این کلاس را معرفی نمایید
ممنون
پاسخ: 
سلام
می توانید از نمونه کد زیر استفاده کنید:
<?php
$str = 'این یک (متن) (آزمایشی) است.';
@$parse = array();
preg_match_all("^\((.*?)\)^", $str, $parse, PREG_PATTERN_ORDER);
print_r($parse);
//echo $parse[1][0];
?>
نمونه خروجی به صورت آرایه:
Array
(
[0] => Array
(
[0] => (متن)
[1] => (آزمایشی)
)

[1] => Array
(
[0] => متن
[1] => آزمایشی
)

)
نویسنده: مازیار
زمان: ۱۴:۴۲:۳۰ - تاریخ: ۱۳۹۲/۰۳/۱۰
ممنون از راهنمایی که کردین ولی کمی برای من پیچیده شد و عملیاتی را که مد نظر داشتم نتوانستم انجام دهم قصد می این بود در متن جستجو شود و کد هایی که در بین
<textarea></textarea>
قرار دارند را replace کند و
<
را تبدیل به
&lt;
نماید
پاسخ: 
برای انجام صحیح این کار باید با نحوه کار توابعی مانند preg_match آشنا باشید، همچنین با آرایه ها در PHP کار کرده باشید، به هر صورت برای مورد بالا می توانید ابتدا موارد داخل تگ textarea را استخراج کرده و در یک آرایه چندگانه بریزید، سپس از کلید و مقدار آن آرایه برای گرفتن خروجی استفاده نمائید، خروجی را نیز با توابعی مانند htmlspecialchars به صورت مورد نظر تبدیل نمائید، مثال:
<?php
$str = '<textarea><b>متن داخل تگ</b></textarea>متن خارج از تگ<textarea><h1>متن داخل تگ</h1></textarea>';
@$parse = array();
preg_match_all("/<textarea[^>]*>(.*?)<\\/textarea>/ims", $str, $parse);
print_r($parse);
echo htmlspecialchars($parse[1][0]);
?>
نمونه خروجی به صورت آرایه:
Array
(
[0] => Array
(
[0] => <textarea><b>متن داخل تگ</b></textarea>
[1] => <textarea><h1>متن داخل تگ</h1></textarea>
)

[1] => Array
(
[0] => <b>متن داخل تگ</b>
[1] => <h1>متن داخل تگ</h1>
)

)
خروجی قسمت echo:
&lt;b&gt;متن داخل تگ&lt;/b&gt;
نویسنده: مازیار
زمان: ۱۶:۲۰:۴۴ - تاریخ: ۱۳۹۲/۰۳/۱۰
ممنون لطف کردین
نویسنده: هادی
زمان: ۱۰:۵۱:۵۷ - تاریخ: ۱۳۹۲/۰۴/۱۲
با سلام میخواستم بدونم که با چه کدی میشه در یک فایل txt عمل جستجو رو انجام داد. ممنون میشم اگه راهنمایی بفرمایید.
پاسخ: 
سلام
پاسخ به سوالتان نیاز به دانستن جزئیات بیشتری دارد، دقیقا قصد چه نوع جستجویی را دارید، به طور مثال:
- جستجوی یک کلمه و برگرداندن TRUE یا FALSE.
- جستجوی یک عبارت و برگرداندن تعداد تکرار آن.
- جستجوی یک عبارت و برگرداندن قسمتی از یک پاراگراف.
و...
لطفا سوال را با جزئیات بیشتری مطرح کنید.
نویسنده: مهدی
زمان: ۰۱:۵۷:۰۲ - تاریخ: ۱۳۹۲/۰۴/۱۸
سلام
تو یه دستور if اگه شرط این باشه که
substr($rs,0,7)=='mesal'
اگه کاراکتر های 0 تا 7 mesal باشه کد اجرا بشه
حالا اگه بخواهیم تو
$rs
کلمه mesal باشه کد اجرا بشه چی کار باید کرد؟
یعنی تو اولی میدونیم جای کاراکترها رو ولی تو دومی نمیدونیم
پاسخ: 
سلام
برای حالت دوم از عبارات با قاعده و تابع preg_match استفاده کنید، مثال:
if(preg_match('/(mesal)+$/i', $rs) > 0){
//اجرای دستورات
}
نویسنده: hosein
زمان: ۱۸:۵۳:۴۷ - تاریخ: ۱۳۹۲/۰۶/۱۷
سلام ضمن تشکر دوباره از سایت خوبتون
میخواستم خواهش کنم که در مورد تابع
preg_match
اطلاعات جامع و کاملی بدید همچنین در مورد
preg_match_all
پاسخ: 
سلام
توضیح کامل این توابع نیاز به آموزش های جداگانه دارد، اما به اختصار می توان گفت که پایه و مبنای هر دو تابع استفاده از عبارات با قاعده (Regular Expressions) برای تجزیه یا بررسی وجود یک الگو در یک رشته است، لذا ابتدا باید با عبارات با قاعده آشنا باشید (که خود مبحث مفصلی است)، preg_match یک رشته را بررسی و با اولین تطبیق، خروجی را به صورت آرایه یا TRUE FALSE برمی گرداند (آشنایی با مبحث آرایه ها نیز اجتناب ناپذیر است)، preg_match_all نیز به صورت مشابه عمل می کند، با این تفاوت که تطبیق رشته با الگو به صورت سراسری و برای تمام رشته انجام می شود و نتیجه به صورت آرایه چندگانه برگردانده می شود.
اطلاعات بیشتر:
http://php.net/manual/en/function.preg-match.php
http://www.php.net/manual/en/function.preg-match-all.php
نویسنده: hosein
زمان: ۱۵:۴۴:۵۹ - تاریخ: ۱۳۹۲/۰۶/۱۸
متشکرم اما در مورد پترن چی؟
در مورد الگو ها چطور باید عمل کرد؟
پاسخ: 
الگوها همان عبارات با قاعده هستند که باید قوانینشان را یاد بگیرید (آموزش های لازم در سایت و در وب وجود دارد).
نویسنده: ابوالفضل
زمان: ۱۰:۴۳:۱۱ - تاریخ: ۱۳۹۲/۰۷/۲۴
سلام من میخوام قسمتی از سایتم برای آی پی های ایرانی قابل رویت نباشه و نمایش داده نشود لطفا راهنمایی بفرمایید
مرسی از سایت خوبتون
پاسخ: 
سلام
انجام این کار خیلی ساده نیست، باید یک بانک IP داشته باشید که بتوانید نام کشور کاربر را از طریق ان بدست آورید، سپس متناسب با سیستم سایت، کدی بنویسید که اگر IP به کاربر ایرانی تعلق داشت، قسمت های مورد نظر را نمایش ندهد، برای دریافت بانک IP می توانید به آدرس زیر مراجعه کنید:
http://www.phptutorial.info/iptocountry/the_script.html
یا
http://chir.ag/projects/geoiploc
نویسنده: میلاد مهدوی
زمان: ۰۲:۰۸:۴۱ - تاریخ: ۱۳۹۲/۰۹/۳۰
سلام
می خواستم اگه میشه راهنمایی کنید متن زیر که تو دیتابیس ذخیره شده رو چطوری تفکیک کنم و خروجی به صورت مرتب نمایش بدم ؟
متن ذخیره شده :
<p align="right"><img src="sample.jpg" alt="" />مطلب نمونه جهت تست</p><p>یک مطلب تستی</p>
شکلی که من می خوام نمایش بده :
<div id="image"><img src="sample.jpg" alt="" /></div>
<div id="text">مطلب نمونه جهت تست<p>یک مطلب تستی</p></div>
ممنون میشم راهنمایی کنید. با تشکر
پاسخ: 
سلام
نمونه کد زیر این کار را انجام می دهد:
<?php
function makeNew($str){
$str = preg_replace('/(<p align="right">)(<img src=".*" alt="" \/>)(.*)(<\/p><p>)(.*)(<\/p>)/i', '<div id="image">$2</div>'."\n".'<div id="text">$3<p>$5</p></div>'."\n", $str);
return $str;
}

$old = '<p align="right"><img src="sample.jpg" alt="" />مطلب نمونه جهت تست</p><p>یک مطلب تستی</p>';
$new = makeNew($old);
echo $new;
?>
نکته: بخش مربوط به دیتابیس را باید با نوشتن یک پرس و جو برای فراخوانی و یک پرس و جو برای آپدیت اطلاعات، خودتان بنویسید، در ضمن ابتدا پس از گرفتن پشتیبان از دیتابیس، در لوکال هاست کد را کامل تست کنید تا از بروز مشکلات ناخواسته جلوگیری شود.
paged صفحه 1 از 3




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

7 × 8
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...