چهارشنبه ۱۲ بهمن ۱۴۰۱

Wednesday, February 1, 2023 GMT +3:30

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

php-limit-word

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

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


یکی از روش های نمایش قسمتی از متن یا پاراگراف تعیین تعداد و میزان کلماتی است که قصد داریم در خروجی نمایش داده شوند، برای انجام این کار در 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);
?>
به این صورت با اجرای کدهای PHP در خروجی صفحه تنها 5 کلمه اول از مقادیر متغیر فرضی string را خواهیم داشت.
آموزش کاربردی پی اچ پی
توضیح:
- تابع explode با دریافت یک مقدار به عنوان جداکننده (در اینجا فضای خالی یا " ") از آرگیومنت اول، متن مورد نظر را که در آرگیومنت دوم تنظیم شده به صورت آرایه ای از کلمات تبدیل می کند (String to Array).
- در قسمت بعدی برنامه تابع implode مجددا عناصر آرایه را به رشته متنی تبدیل می کند (Array to String)، البته در اینجا استفاده از array_splice باعث می شود که تنها تعداد کلمات محدودی از متن مورد نظر به خروجی ارسال شوند که این تعداد در متغیر limit (آرگیومنت دوم) مشخص شده است.
نکته: برای محاسبه تعداد کلمات موجود در آرایه می توانیم از تابع sizeof یا count هم در PHP استفاده کنیم که ممکن است برای توسعه کد در شرایط متفاوت مورد نیاز باشد:
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
$words = explode(" ", $string);
echo sizeof($words);
echo '<br>';
echo count($words);
?>
خروجی دستورات بالا به صورت زیر است:
11
11
به این شیوه می توانیم برنامه هوشمندتری داشته باشیم به فرض تنها اگر تعداد کلمات یک متن از مقادیر مورد نظرمان بیشتر بود قسمت array_splice اجرا شود و یا ایده های متنوع دیگری که ممکن است به ذهن برنامه نویس برسد.

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


روش دیگر برای انتخاب و نمایش قسمتی از متن و پاراگراف، شمارش حروفی است که تمایل داریم به همان تعداد به خروجی ارسال شوند، برای انجام این کار می توانیم از تابع substr و برای حروف فارسی از mb_subsrt استفاده کنیم، به طور مثال در کد زیر تعداد 22 حرف اول از نمونه متنی که قبلا بررسی کردیم را با این روش استخراج کرده و به خروجی می فرستیم:
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
echo mb_substr($string, 0, 22, mb_detect_encoding($string));
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
آموزش کاربردی پی اچ پی
در حال حاضر تابع substr تنها از استاندارد ASCII پشتیبانی می کند و برای کلمات فارسی که از استاندارد UTF-8 پیروی می کنند چندان کاربردی نیست چون هر حرف فارسی در تابع substr دو کاراکتر (Multibyte) حساب شده و به همین دلیل گاهی مواقع خروجی ناقص و غیر استاندارد در انتهای متن مورد نظر چاپ می شود، به فرض:
آموزش کاربر�
همان طور که گفتیم این موضوع مربوط به ساز و کار یونیکد زبان فارسی است که هر حرف متشکل از دو بایت است اما تابع substr حروف را بر اساس شمارش هر بایت تجزیه می کند و این منجر به بروز مشکل می شود، برای رفع مشکل بهتر است از تابع mb_substr و mb_detect_encoding مطابق با نمونه بالا استفاده کنیم.

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


علاوه بر روش های بالا که صرفا متکی بر دستورات و توابع زبان برنامه نویسی PHP هستند، در سیستم مدیریت پایگاه داده MySQL و به هنگام اجرای پرس و جو (Query) نیز این امکان وجود دارد که بتوانیم نتایج را به تعداد حروف یا کلمات خاصی محدود کنیم، در ادامه با دو تابع SUBSTRING و SUBSTRING_INDEX آشنا خواهیم شد.

شمارش حروف با تابع SUBSTRING در MySQL


مانند آنچه در مورد برنامه نویسی کدهای PHP گفتیم در MySQL هم به دو روش شمارش حروف و شمارش کلمه می توانیم تعداد کاراکترها یا عبارات خروجی را به عدد خاصی محدود کنیم، برای شمارش حروف از تابع SUBSTRING به شکل نمونه زیر استفاده می کنیم:
mysqli_query($conn, "SELECT id, SUBSTRING(col_name, 1, 30) AS col_name FROM tbl_name ORDER BY id DESC LIMIT 1");
در مثال بالا با استفاده از تابع درونی SUBSTRING در MySQL از جدول فرضی tbl_name، ستون col_name کاراکترهای 1 تا 30 را انتخاب کرده ایم، البته این تابع نیز نسبت به حروف فارسی در مقایسه با حروف انگلیسی رفتاری متفاوت دارد و روشی که در ادامه خواهیم گفت برای زبان فارسی مناسبتر است.

شمارش کلمه با تابع SUBSTRING_INDEX در MySQL


در اغلب مواقع صرف شمارش حروف ایدآل نیست و معمولا کاراکترهای ناقص یا اضافه در خروجی خواهیم داشت، طراحان و برنامه نویسان وب عموما به دنبال راه حلی جهت شماره کلمه به کلمه هستند که برای این منظور در MySQL تابع SUBSTRING_INDEX به شکل نمونه زیر قابل استفاده است:
mysqli_query($conn, "SELECT id, SUBSTRING_INDEX(col_name, ' ', 30) AS col_name FROM tbl_name ORDER BY id DESC LIMIT 1");
در مثال بالا با استفاده از تابع درونی SUBSTRING_INDEX در MySQL از جدول فرضی tbl_name، ستون col_name تعداد 30 کلمه اول را انتخاب کرده ایم، خوشبختانه این روش با حروف فارسی سازگار است چون مبنای کار تابع بررسی فضای خالی (' ' در آرگیومنت دوم) بین کلمات است.
دسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
ساخت منوی هوشمند با PHP و CSS
ارسال پارامتر به URL و دریافت مقادیر با PHP
دریافت و نمایش پیج رنک گوگل با PHP
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
دیدگاه
more ۹۸ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
روستا زاده
۰۱:۱۹ ۱۴۰۰/۱۲/۲۵
باتشکر از شما
ببینید اصلا واسه من کار نمی کنه کدها که براتون فرستادم کدهای خودتون بود و دستکاری نکردم با این دستور هم چیزی برای من نشون نمیده
echo file_get_contents('http://rozblog.com');
واسه همه سایتها کار می کنه الا این سایت! وقتی آدرس وبلاگهاش هم میذارم اصلا چیزی نشون نمیده تابع curl که گذاشتید امتحان کردم خود رزبلاگ رو بالا میاره ولی آدرس وبلاگهاش نه! واسه آدرس وبلاگها حتی یه div ساده هم می تونید تست کنید و کدش رو بهم بدید! پیرم کرد انقد الگو عوض کردم واسه سایتهای دیگه هرچی الگو میزنم کار می کنه ولی واسه رزبلاگ و وبلاگهاش نه!
نمونه کد زیر را امتحان کنید، طبق تست ما برای وبلاگ ها هم مشکل رفع می شود:
<?php
ini_set("user_agent" , "Mozilla/3.0\r\nAccept: */*\r\nX-Padding: Foo");
echo file_get_contents('http://example.com/');
?>
به جای http://example.com آدرس وبلاگ را درج کنید.
روستازاده
۱۱:۲۵ ۱۴۰۰/۱۲/۲۵
خدا خیرتون بده
واسه من کار نکرد متاسفانه نمی دونم چرا! رزبلاگ رو بصورت www با https بالا میاره فقط ولی وبلاگهاش اصلا هیچی نشون نمیده!
ببخشید خیلی مزاحم شما هم شدم حلال کنید فقط یه سوال دیگه وقتی واسه سایت ارز دیجیتال میزنم سرور cloudflare رو می نویسه
برای نشون دادن کدها راهی وجود داره؟
آخرین سوالم بود
با تشکر فراوان از شما
بدون بررسی آدرس مورد نظر امکان راهنمایی دقیق میسر نیست، در کل بهترین شبیه ساز برای ایجاد رفتار مرورگر با PHP استفاده از curl است به این شرط که پارامترهایی که مرورگر در درخواست خود ارسال می کند را برای curl تنظیم کرده باشیم، به فرض:
$url="http://example.com";
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
$result = curl_exec($ch);
var_dump($result);
یا
$ch = curl_init("http://example.com");
curl_setopt_array($ch, array(
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0',
CURLOPT_ENCODING => 'gzip, deflate',
CURLOPT_HTTPHEADER => array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Accept-Encoding: gzip, deflate',
'Connection: keep-alive',
'Upgrade-Insecure-Requests: 1',
),
));
curl_exec($ch);
روستازاده
۰۱:۴۳ ۱۴۰۰/۱۲/۲۶
از لطف و محبت شما بسیار ممنون و سپاسگزارم
به curl خودم
curl_setopt_array($ch, array(
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0',
CURLOPT_ENCODING => 'gzip, deflate',
CURLOPT_HTTPHEADER => array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Accept-Encoding: gzip, deflate',
'Connection: keep-alive',
'Upgrade-Insecure-Requests: 1',
),
اضافه کردم همه چی درست شد قبلا هم این رو کم داشت واسه همین با خیلی از سایتها مچ نمی شد 5 سال بود که از این کد استفاده می کردم و با خیلی از سایتها مشکل داشت ولی با کمک شما مشکل کدهای curl من درست شد
عمیقا از لطف و محبت شما بسیار ممنون و سپاسگزارم
خیلی خوشحالم کردید انشاءالله خدا بهتون سلامتی و دل خوش بده سال نوتون هم مبارک باشه
سال نو خودتون و خانواده محترمتون
در پناه خدای بزرگ باشید
خوشحالیم که مشکل رفع شد، متقابلا آرزوی سلامتی، دلخوشی و سالی خوب برایتان داریم.
روستا زاده
۰۲:۳۴ ۱۴۰۰/۱۲/۲۶
ببخشید این کدهای من یه مشکل داره پرچم کشورها رو واسه کامنت نشون نمیده و همش پرچم ایران میزنه!
راهی داره درست بشه و بشه واسه هر آی پی پرچم خودش رو نشون بده؟!
function getCountry($ip = '') {
//tmp
//return 'ir';

if(empty($ip)) {
$ip = self::user_ip();
}

$_ = explode('.', $ip);
$_ip = "{$_[0]} . {$_[1]}";

$cache = Yii::app()->cache->get('ip_'.$_ip,1000);
if(!empty($cache)) {
return $cache;
}

$res = self::file_get_contents('http://api.wipmania.com/' . $ip, 15);
$res = strtolower($res);
if(empty($res) or $res == 'xx' or strlen($res) > 3) {
$res = 'eu';
}

Yii::app()->cache->set('ip_' . $_ip, $res);
return $res;
}
تابع بالا ویرایش شد، لطفا ببینید اگر مشکلی دیگری دارد می توانید از تابع جایگزین زیر هم برای نمایش کد کشور کاربران بر اساس آی پی آنها به صورت آنلاین استفاده کنید:
function getCountry($ip) {
$ip = trim($ip);
$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=$ip");
$res = strtolower($xml->geoplugin_countryCode);
if(empty($res) or $res == 'xx' or strlen($res) > 3) {
$res = 'eu';
}
return $res;
}
روستازاده
۱۶:۰۴ ۱۴۰۰/۱۲/۲۶
با سلام و تشکر استاد
توی پاسخ بالا نوشتید تابع بالا ویرایش شد! من متوجه نشدم کدوم تابع رو ویرایش کردید! با تابعی هم که شما لطف کردید و برام نوشتید هم امتحان کردم ولی پرچم ها رو نشون نداد! و واسه همه آی پی ها پرچم خالی گذاشت و نوشت eu!
منظور تابع خودتان بود که در سوال درج کرده اید، اگر تابع جایگزین را با یک آی پی تستی اجرا کنید خروجی برابر با کد دو حرفی کشورها خواهد بود به فرض:
echo getCountry('108.177.16.0');
نتیجه اینکه باید به تابع آرگیومنت درست (که همان آدرس IP است) بدهید تا خروجی مناسب دریافت کنید، با توجه به اینکه تابع به صورت مستقل صحیح عمل می کند اشکال کار باید در جای دیگری از کدهایتان باشد که آدرس IP را آماده سازی می کند یا اینکه تابع به درستی فراخوانی نشده است، به نظر رفع مشکل جز با خطایابی کل کدهای برنامه به نحو دیگری میسر نیست.
روناک قادری
۰۹:۲۰ ۱۴۰۱/۰۱/۰۴
با سلام و درود بر شما
ببخشید راهی وجود داره واسه الگو از این
$title = preg_match("/<title[^>]*>(.*?)<div class='content'>/ims", $content, $match);
استفاده کرد؟
بجای " لازم است ' استفاده کنم به عبارتی یعنی اینارو با هم داشت؟
با تشکر
سوالتان مبهم است، لطفا دقیقا منظورتان را در خصوص "لازم است" و "اینارو با هم داشت" توضیح دهید تا امکان راهنمایی وجود داشته باشد، دقیقا از یا به چه متنی چه چیزی را می خواهید کم یا اضافه کنید؟
محسن تیموری
۱۱:۰۳ ۱۴۰۱/۰۱/۰۴
با سلام استاد گرامی
ببخشید یک سوال داشتم چرا سورس سایت دیجی کالا نشون داده نمیشه؟ یه افزونه برای وردپرس هست به نام دیجی اسکراپر که همه محصولات دیجی کالا رو می ذاره! اونا مگه خصوصیات محصول رو از طریق سورس نمیذارن؟ من هرکاری می کنم نمی تونم با استفاده از سورس دیجی کالا محصولی رو اضافه کنم!
در حال حاضر سورس سایت دیجی کالا به صورت اسکریپتی است یعنی به صورت خام سورس کد اصلی وجود ندارد و پس از اجرای Script ها محتوای سایت نمایش داده می شود، احتمالا افزونه مورد نظر از ساز و کار API یا تجزیه فایل های اسکریپت استفاده می کند.
روناک قادری
۱۵:۰۵ ۱۴۰۱/۰۱/۰۴
با سلام مجدد
ببخشید درست توضیح ندادم این الگو رو نگاه کنید
$title = preg_match('/<title class="h1">(.*?)<div class='content'>/ims', $content, $match);
این الگو از نظر php اشتباهه و ارور میده چون یا باید اول الگو ' باشه یا باید " باشه یعنی اینجوری
('دستور "الگو" الگو')
("دستور 'الگو' الگو")
لطفا به کاراکترهای الگو دقت کنید من توی الگو لازم است از جفتش استفاده کنم تا دقیقا از توی سورس سایت چیزی که میخوام رو پیدا کنم چون کدهای سورس دقیقا مثلا الگویی هست که من نوشتم
برای رفع خطای استفاده از سینگل و دابل کوتیشن ها (Single / Double Quotation) کافی است به آنها کاراکتر بک اسلش اضافه کنیم، به فرض:
$title = preg_match('/<title class="h1">(.*?)<div class=\'content\'>/ims', $content, $match);
این حالت زمانی در PHP مورد نیاز است که سینگل را داخل سینگل و دابل را داخل دابل کوتیشن استفاده کرده باشیم.
روناک قادری
۰۹:۴۰ ۱۴۰۱/۰۱/۰۵
با سلام و با تشکر از محبت های شما
درست شد نمی دونستم اینطوریه ببخشید یه سوال دیگه هم داشتم من برای این الگو یه جا لازمه که تگ اول رو اینطوری وارد کنم
<div id="Post5">
بعد هر پست سورس تگش فرق می کنه مثلا پشت شماره 6 تگش با این شروع میشه
div id="Post6">
و الا آخر حالا باید الگو رو چطوری بنویسم؟
$title = preg_match('/<div id="post5">(.*?)<\\/div>/ims', $content, $match);
چون دیو هر پست شماره اون پست رو داره
post1
post2
post3
از لطف شما بسیار سپاسگزارم
برای اینکه اعداد را به صورت غیرثابت داشته باشیم الگو را به شکل زیر می توانیم بنویسیم:
$title = preg_match('/<div id="post[0-9]+">(.*?)<\\/div>/ims', $content, $match);
روناک قادری
۱۸:۲۴ ۱۴۰۱/۰۱/۰۵
ببخشید این مدت خیلی مزاحم شما شدم
شرمنده، سوالات بنده رو بخاطر ناآگاهی ام در این زمینه ببخشید تازه کار هستم و دوست دارم یاد بگیرم و از یادگیری این چیزها منو خیلی خوشحال می کنه آیا میشه پاراگراف ها رو تفکیک کرد؟! مثلا من یه متنی دارم که 10 تا پاراگرافه هر پاراگراف هم مشخص نیست چند کلمه است ولی با تگ <p> می شن و با </p> بسته می شن
الان من می خوام موقع ارسال کدی داشته باشم که مثلا:
اگه تعداد پاراگراف ها تا سه تا بود مطالب رو توی
$item->content
ذخیره کنه اگه بیشتر بود بقیه پاراگرافها رو توی
$item->fullcontent
ذخیره کنه فکر کنم نشه؟! چون هر چی توی اینترنت گشتم واسه تعداد کاراکترها بود! اگه نمیشه واسه تعداد کارکترها چطور می شه اینکارو کرد مثلا همین روشی که گفتم اگه واسه تعداد پاراگرافها عملی نیست واسه تعداد کلمات چطوری عملی می شه!
مثال:
اگه تعداد کلمات تا 500 تا بود مطالب رو توی
$item->content
ذخیره کنه اگه بیشتر بود بقیه کلمات رو توی
$item->fullcontent
ذخیره کنه
با تشکر فراوان
موفق و پیروز باشید
خواهش می کنیم، سوالات همین طور با جزئیات و دقیق در چارچوب خدمات متداول سایت باشند مشکلی ندارند، برای شمارش تگ های p یا پاراگراف می توانید از نمونه کد زیر الگوبرداری کنید:
<?php
$html_str = '<p>پاراگراف اول</p><b>نمونه متن</b><p>پاراگراف دوم</p>';
$dom = new DOMDocument;
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $html_str);
$count_tag = $dom->getElementsByTagName('p')->length;
echo $count_tag;
?>
روش شمارش کلمه در آموزش حاضر توضیح داده شده است، مثال:
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
$words = explode(" ", $string);
$count = count($words);
if($count <= 500){
echo '<= 500';
} else {
echo '> 500';
}
?>
روناک قادری
۲۲:۱۶ ۱۴۰۱/۰۱/۰۵
با سلام
ببخشید مزاحم همیشگی شما هم شدم خیلی ممنون درست شد دست شما درد نکنه یه سوال دیگه هم دارم دیدید وقتی لینکی که حاوی متن فارسی است کپی می کنیم بصورت کدبندی نوشته می شه! مثل لینک همین مطلب شما که حاوی متن فارسی است ولی وقتی کپی پست می کنیم اینطوری می شه
%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D9%82%D8%B3%D9%85%D8%AA%DB%8C-%D8%A7%D8%B2-%D9%85%D8%AA%D9%86-%D9%88-%D9%BE%D8%A7%D8%B1%D8%A7%DA%AF%D8%B1%D8%A7%D9%81-%D8%A8%D8%A7-php
هی چی می خواستم لینک رو بصورت فارسی اینجا وارد کنم نمی شد و کدبندی می کرد من با file_get_contents لینک سایتها رو از rss می گیرم که لینک اونجا بصورت فارسی ذخیره شده و وقتی من لینک رو اینطوری می گیرم بازم همون فارسی ذخیره می شه! من می خوام لینکی که اینطوری می گیرم مثل کپی پست کردن عمل کنه و متن فارسیش مثل لینکی بشه که اینجا پست کردم encode کردم همون خودش بود، دیگه هرکاری کردم لینک قبل ذخیره شدن هیچ تغییر کرد!
میشه اینو هم درست کرد؟
باتشکر خیلی فراوان
خدا بهتون سلامتی و خوشبختی بده
در PHP با دو تابع rawurlencode و rawurldecode می توانیم لینک ها را به صورت استاندارد RFC 3986 دیکد و یا به حالت عادی تبدیل کنیم.
https://www.php.net/manual/en/function.rawurlencode.php
روناک قادری
۲۲:۴۵ ۱۴۰۱/۰۱/۰۵
ببخشید من پیام قبلیم واسه rss این لینکه
https://yun.ir/f2ori5
نگاه کنید همه لینک ها حاوی متن فارسیه اگه پیام قبلیم نشد درست کرد میشه یه کاری کرد که لینک های این صفحه رو دربیارم؟ قبلا واسه درآوردن لینک های یک صفحه از این کد استفاده می کردم
$data = file_get_contents($_);
$s = preg_match('/<div id="result">(.*?)<div class="pagination">/ims', $data, $match);

$data = strip_tags($match[1], "<a>");
$d = preg_split("/<\/a>/",$match[1]);

foreach( $d as $k => $u ) {
if(strpos($u, "<a href=") !== false) {
$u = preg_replace("/.*<a\s+href=\"/sm","",$u);
$u = preg_replace("/\".*/","",$u);
echo str_replace('/posts/post/','/post/',$t.$u)."<br>
";
}
}
که با file_get_contents لینک هارو درمیارم واسه این صفحه که بخوام لینکهاش رو دربیارم چطوری می شه؟ لینکها با هم دربیارم کپی پست کنم مشکل من درست می شه فکر کنم این دیگه آخرین سوالم بود واسه این مدت که خیلی مزاحمتون شدم حلال کنید
با تشکر فراوان
خواهش می کنیم مسئله ای نیست، برای استخراج آیتم ها از فایل RSS می توانید از نمونه کد زیر استفاده کنید:
<?php
$url = 'http://example.com/rss.xml';
$xml = file_get_contents($url);
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXPath($document);

$expression = '//channel/item/link';

foreach ($xpath->evaluate($expression) as $link) {
echo $link->textContent . '<br>';
}
?>
روناک قادری
۰۴:۲۷ ۱۴۰۱/۰۱/۰۶
ببخشید تورو خدا
برای این کد که لطف کردید برام نوشتیدـ
<?php
$html_str = '<p>پاراگراف اول</p><b>نمونه متن</b><p>پاراگراف دوم</p>';
$dom = new DOMDocument;
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $html_str);
$count_tag = $dom->getElementsByTagName('p')->length;
echo $count_tag;
?>
آیا راهی وجود داره که بشه متن رو باهاش تقسیم بندی کرد؟ چون ای برای شمارش پاراگراف هاست! و خیلی خوب تعداد پاراگراف هارو مشخص می کنه هرکاری کردم نتونستم مثلا یه متن ده پاراگرافی رو باهاش تقسیم کنم تقسیم به دو بخش که مثلا بهش اول ۵ تا پاراگراف رو در خودش ذخیره کنه و بخش دوم تعداد باقیمانده پاراگراف هارو با خودش ذخیره کنه من میخوام که متن به دو بخش تقسیم بشه اگه کمتر از پنج پاراگراف بود توی content ذخیره بشه
بقیه اش رو ذخیره کنم توی fullcontent چون متن زیاد باشه لود کردن صفحه اصلی سایت سنگین میشه به لطف و کمک شما خیلی چیزها ازتون یاد گرفتم و منو شرمنده خودتون کردید هدف از خلقت هر آدمی چیزیه که انسان از درکش عاجزه پیامبری فقط این نیست از طرف خدا به آدمی وحی بشه که برو فلانی رو راهنمایی کن کاری که شما می کنید کمتر از پیامبری نیست چون آدمهای زیادی مثل من ناآگاه ازتون خیلی چیزها یاد می گیرن دست پدر و مادر بزرگوارتون رو بخاطر کمکهایی که به مردم کردید و می کنید می بوسم انشاءالله در پناه خدا باشید اگه می بینید زود زود سوال می پرسم ببخشید احتمالا کامپیوترم بفروشم چون به پولش نیاز دارم و دیگه نمی تونم با گوشی درست و حسابی کار کنم شبها هم واسه این بیدارم مثل الان که ساعت نزدیک چهار و نیم صبحه چون کامپیوترم بفروشم انگیزه ای برام نمی مونه
خواهش می کنیم نظر لطف شما است، خوشحالیم اگر در این دنیای پر از سختی در حد توان کمکی کرده باشیم، در مورد سوالتان در صورتی که تگ های p به صورت متداول و پشت سر هم باشند می توانید برای تفکیک پاراگراف ها از نمونه کد زیر الگوبرداری کنید، در غیر اینصورت (یعنی اگر پاراگراف ها پشت سر هم و متوالی نباشند و بینشان تگ دیگری باشد کار پیچیده می شود و باید کد زمانبری نوشت):
<?php
$html_str = '<p>پاراگراف اول</p><p>پاراگراف دوم</p><p>پاراگراف سوم</p><p>پاراگراف چهارم</p><p>پاراگراف پنجم</p><p>پاراگراف ششم</p><p>پاراگراف هفتم</p>';
$pattern = "/(<p[^>]*>.*<\/p>)/isU";
preg_match_all($pattern, $html_str, $matches);
$start_content = null;
$end_content = null;
for($i = 0; $i < count($matches[0]); $i++) {
if($i < 5) {
$start_content .= $matches[0][$i];
} else {
$end_content .= $matches[0][$i];
}
}
echo $start_content;
echo '<hr>';
echo $end_content;
?>
در صورتی که از ثابت بودن فرمت سورس کد مورد نظر اطمینان ندارید کد بالا مناسب نیست و ممکن است برای کدهای مختلف خطا داشته باشد.
روناک قادری
۲۰:۴۵ ۱۴۰۱/۰۱/۰۶
با سلام و درود بر شما
بسیار از لطف و محبت شما ممنون و سپاسگزارم
بخدا منو خیلی شرمنده کردید نمی دونم چطوری ازتون تشکر کنم
خیلی بزرگوارید انشاءالله هرچیزی که توی دنیا و قیامت از خدا می خواهید بهتون بده هم به شما و هم به تموم عزیزانتون
الهی آمین
خیلی خوب بود به درستی کار می کنه فقط گفتید امکان داره تگ های دیگه ای هم وجود داشته باشند. من قبل از اینکه متن ها ذخیره بشه همه div ها رو تبدیل به p می کنم چون div ها اکثر اضافه هستند و شما لطف کردید یه بار تابع حذف تگ های اضافی رو برام فرستادید و اونم خیلی عالی عمل می کنه فقط یکی دو تا تگ می مونه تگ img و تگ figure که تعدادی از سایتها واسه قرار دادن تگ های img ازش استفاده می کنند اگه این دو تگ رو هم یک p یا همون پاراگراف حساب کنه و یا هر تگ غیر اینها رو هم p حساب کنه هیچی جا نمی مونه خیلی خوشحال شدم واسه همه پاراگراف ها به درستی کار می کنه و هیچ مشکلی نداره اگه img رو هم یک پاراگراف حساب کنه عالی میشه بقیه تگهای دیگه که مربوط به عکس هستند رو می شه قبل از ذخیره شدن به p و یا به img تبدیل کرد یه دنیا ازتون سپاسگزارم
یه همسایه ای دارم که هیچ وقت حتی یه چای هم بهم تعارف نکرده من اکثرا وقتی چیزی برای خودم درست می کردم براش می بردم چون می گفتم مثل من تنها و بی کسه البته همسایه که نه، صاحبخونه منه چند شب پیش ازش ناراحت شدم در حالیکه همیشه بهش کمک می کردم بعد گفتم دیگه کاری به کارش ندارم تا اینکه یاد کار شما افتادم شما نمی دونید کاربران کی هستند، چی هستند و از کجا هستند ولی بازم خالصانه و بدون هیچ چشم داشتی بهشون کمک می کنید وقتی یاد بزرگواری و کار شما افتادم با خودم گفتم اشکالی نداره اون همیشه ناراحتم می کنه و کاری واسه من انجام نمیده در حالیکه هیچ وقت چیزی ازش نخواستم من باز بهش کمک می کنم هر کاری از دستم بربیاد براش انجام میدم من کار خودم می کنم مثل شما که همیشه خوب هستید و به همه کمک می کنید
انشاءالله خدا بهتون سلامتی و خوشبختی بده
سپاس فراوان از محبت و دعای خیر شما متقابلا آرزوی سلامتی و دلخوشی داریم، در مورد تگ img و figure لطفا یک نمونه کد درج یا معرفی کنید تا دقیق تر بشود روی سورس ها اسکریپت را اصلاح کرد.
روناک قادری
۰۱:۳۹ ۱۴۰۱/۰۱/۰۷
با سلام و تشکر فراوان از شما
بازم شرمنده بخدا عکس ها یا با <img> شروع میشن یا اینجوری
<img style="display: block; margin-left: auto; margin-right: auto;" title="برنامه حسابدار عکاسی و فیلمبرداری با اکسس" rel="nofollow" src="/images/products/8715/12.jpg" alt="برنامه حسابدار عکاسی و فیلمبرداری با اکسس" width="718" height="506"><br>
یا استایل دارن و یا ساده هستند و استایل ندارن از این دو حالت بیشتر نیستن و یا با
<figure class
و یا با
<figure>
تگ های p هم همین طور یا با
<p>
یا با
<p style
همین البته من با preg_repalce همیشه بقیه تگ ها رو به p تبدیل می کنم و یا استایلها رو باهاش حذف می کنم چون اونطوری که گفتید عکس ها با پاراگرفها شمارش نمیشن پس بهترین کار اینکه چهار حالت داشته باشیم که در این حالت div هم شاملش بشه! یعنی دقیقا و در نهایت این تگ ها
<p>
<div>
<img>
<figure>
و حالت باز اینا که شامل استایل میشن هر کدام از اینا یه پاراگراف حساب بشن البته یه چیزی یادم رفت که چون پرانتز رو باز گذاشتم و داخل پرانتر می تونه شامل هر نوع class و استایلی بشه!
انشاءالله هرچی از خدا میخواهید بهتون بده و فرشته ها و بقیه ملاک بهتون سجده کنن اینو از صمیم قلبم گفتم چون خیلی بامحبت و بزرگوار هستید خدا به خودتون و عزیزانتون سلامتی و خوشبختی بده
الهی آمین
یه پیشنهاد هم داشتم البته کادر جواب تست ربات بودن واسه ارسال کامنت رو telfield کنید چون جوابش جز عدد نیست و خیلی ها با گوشی میان و کامنت میدن اینطوری خیلی بهتر میشه
بازم شرمنده و با تشکر
خواهش، منظور این بود که اگر تگ ها (هر تگی) داخل تگ های p باشند مشکلی ایجاد نمی کنند، به فرض:
<p><img></p>
<p><div style="color:#ccc;"></p>
این حالت مشکلی ایجاد نمی کند، اما برای این حالت نیاز به نوشتن کد پیچیده و زمانبری است:
<p><img></p><br>
<p><div style="color:#ccc;"></p>text<br>
چون تگ های br اضافه و خارج از p یکپارچگی الگو را بهم می ریزد، به هر صورت هدف این بود که قبل از استفاده از کد به دقت حالت های مختلف را تست و بررسی کنید تا مشکل ناخواسته ای ایجاد نشود.
در مورد پیشنهاد اصلاح نوع فیلد ورود کد امنیتی ضمن تشکر فراوان از نکته سنجی حتما در اولین فرصت انجام می شود.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
8 × 7
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
علی رستگار
سلام خسته نباشید با تشکر از سایت خوبتون. من میخوام منوی سایت رو به صورت کامل از دید گوگل مخفی کنم، در حال حاضر...
۱۴۰۱/۱۱/۱۱

m.b
با سلام و خسته نباشید من یک سوال دارم . تو فرم لاگین بعد از لاگین کردن کاربر میخوام تاریخ و ساعت آخرین زمان...
۱۴۰۱/۱۱/۰۶

سینا
با سلام و درود من چهار تا داده به شیوه زیر دارم میخوام با php کوچکترین تاریخ هر دو کاربر ۲ و ۳...
۱۴۰۱/۱۱/۰۶

امیرحسین رستمی
سلام وقت بخیر یه همچین ارایه ای داریم میخوام همه حالت های حروفو بدست بیارم مثل بازی کلماتیک که هر حرف دوبار تکرار نشه...
۱۴۰۱/۱۱/۰۵

Ⲥⲅⲇⲍⲩ ⲃⲟⲩ
اینم لینک مستقیمش حتی لطفا خودتون با این لینک یا هر لینک آهنگ درست کنید بزارین ببینم
۱۴۰۱/۱۱/۰۵

Ⲥⲅⲇⲍⲩ ⲃⲟⲩ
هر چی میزارم رو پخش خودکار ولی تا وقتی روش کلیک نکنی پخش نمیشه چرا؟؟ رو اتو پلیِ ! هزارتا راهو روش رو رفتم جواب...
۱۴۰۱/۱۱/۰۵

نور
سلام این کد ابتدای وبلاگه منه چطور میتونم به آدرس لینکی که توش میشه تغییرات کد رنگ ها رو انجام داد دسترسی پیدا...
۱۴۰۱/۱۱/۰۴

پــــرتو
سلام خسته نباشید شرمنده دوباره مزاحم میشم نه انگار متوجه سوالم نشدین ، عه جناب منظورم این هستش که یه کدی دارم و میخاستم ویرایشش...
۱۴۰۱/۱۱/۰۳

پــــرتو
سلام جناب خسته نباشید شاید این سوالم تکراری باشه ولی خب راستش نمیدونم سوالمو کجا ثبت کردم واسه همین دوباره می پرسم ببخشید...
۱۴۰۱/۱۱/۰۳

پژمان
با سلام من یک سوال دارم می خواستم ببینم چطور میشه وقتی صفحات سایت عوض می شن هدر و فوتر ثابت بمونه و فقط محتویات...
۱۴۰۱/۱۱/۰۱

سینا
با سلام و با تشکر از شما از لطف و محبت شما بسیار ممنون و سپاسگزارم ببخشید این چند خیلی پیام دادم و مزاحم...
۱۴۰۱/۱۰/۲۹

سینا
با سلام و درود من یه کد نوشتم که برای id های پشت سر هم جواب میده و زمان رو برام تغییر میده وقتی...
۱۴۰۱/۱۰/۲۹

سینا
باسلام مجدد و درود برشما واسه مطالب جدید راحته آخرین مطلب رو با کوئری زدن توی دیتابیس پیدا کنم و برای مطلب بعدش آپدیت...
۱۴۰۱/۱۰/۲۸

سینا
با تشکر از شما استاد بزرگوارم اینو شب تست می کنم من واسه آپدیت کردن تایم لازم دارم توضیح کامل به اینصورت: واسه...
۱۴۰۱/۱۰/۲۷

سینا
با سلام و درود بر شما راهی هست توی mysql من داده های یک جدول رو که عددی هستند به صورت زیر آپدیت کنم!...
۱۴۰۱/۱۰/۲۶

علی داوری
سلام. چطور از فایل های داخلی کامپیوتر برای آیکون سایت استفاده کنیم؟ مسیر عکسو تو href کپی میکنم اتفاقی نمیفته
۱۴۰۱/۱۰/۲۴

سینا
شرمنده تورو خدا ببخشید الان یه سوال دیگه و یه مشکل دیگه هم دارم ممنون میشم راهنمایی کنید یه قسمت از سایتم مطالب رو...
۱۴۰۱/۱۰/۲۲

سینا
با تشکر از شما بخاطر پاسخ قبلی بسیار از لطف شما سپاسگزارم شرمنده یه سوال دیگه هم داشتم راهی وجود داره موقع export کردن...
۱۴۰۱/۱۰/۲۲

سینا
با سلام و خسته نباشید من یه صفحه دارم مثلا اول یه متنی رو echo می کنم رو وارد کنه با...
۱۴۰۱/۱۰/۲۱

ali
میخواستم حالت تصویر بدم بدون استفاده از list_style_image روشی هست بشه طراحی کرد
۱۴۰۱/۱۰/۲۰

محمد جواد
با سلام ... من میخوام اطلاعات محصولی که داخل دیتابیس mysql هست رو بجای ستونی ، ردیفی نمایش بدم برای نمایشش چطوری باید کد...
۱۴۰۱/۰۹/۲۷

کاربر
سلام هر کاری کردم جواب نداد
۱۴۰۱/۰۹/۲۳

پارسا
ببخشید چطور سایز هاشون و اندازه هاشون رو بزرگ تر کنیم ؟
۱۴۰۱/۰۹/۲۱

ابراهیم جهانگیری
حدود سه روز بود دنبال این مطلب بودم . ممنون از شما
۱۴۰۱/۰۹/۱۶

پــــرتو
سلام خسته نباشید ببخشید اگر بخایم همین منو رو بصورت عمودی بخایم انجامش بدیم باید از چه کدی استفاده کنیم و اگر بخایم برای قالبمون...
۱۴۰۱/۰۹/۱۵

میثم
بسیار سپاسگزار و ممنونم. واقعا عالی بود.
۱۴۰۱/۰۹/۱۵

میثم
ممنونم خیلی عالی بود. کلی محاسبات ریاضی انجام دادم :) اخرش یه شرط دیگه میخواست! حالا یه سوال: در حال حاضر بعد از...
۱۴۰۱/۰۹/۱۳
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.