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

انتخاب و نمایش قسمتی از متن و پاراگراف یکی از نیازهایی است که معمولا در طراحی امکانات صفحات وب کاربردهای زیادی دارد، به طور مثال برای ایجاد قابلیت پیش نمایش محتوای دریافت شده از پرس و جوهای دیتابیس، نمایش خلاصه متن و پاراگراف در فرم های وب، نمایش قسمتی از نتیجه در هنگام جستجو در مطالب سایت، محدود کردن نمایش محتوای در اختیار کاربران با سطح دسترسی های متفاوت و موارد مشابه دیگری این امکان مورد استفاده قرار می گیرد، خوشبختانه نمایش قسمتی از متن و پاراگراف بسته به شرایط و نیاز طراح سایت به چند شیوه مختلف چه از طریق برنامه نویسی 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

ساخت منوی هوشمند با PHP و CSS
دریافت و نمایش پیج رنک گوگل با PHP
نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
دیدگاه


سیدعباسی
۱۶:۲۶ ۱۴۰۳/۱۱/۰۲
با سلام و خسته نباشید
این کد رو نگاه کنید
ممنون می شم بررسی کنید.
با تشکر
این کد رو نگاه کنید
<?php
$html = '
<a href="?q=%23%D8%AF%DB%8C%D9%84%DB%8C_%DA%A9%D9%85%D8%A8%D9%88">#دیلی_کمبو</a>
<a href="?q=%23%DA%A9%D8%A7%D9%85%D8%A8%D9%88_%D8%B1%D9%88%D8%B2%D8%A7%D9%86%D9%87">#کامبو_روزانه</a>
<a href="?q=%23%D8%A7%DB%8C%D8%B1%D8%AF%D8%B1%D8%A7%D9%BE">#ایردراپ</a>
<a href="?q=%23%D8%A8%D9%88%D9%84_%D8%B1%D8%A7%D9%86">#بول_ران</a>
';
// حذف لینکها که با ?q= شروع میشوند و فقط نگهداشتن متن
$cleanedText = preg_replace('/<a href="?q=[^"]*">([^<]*)</a>/', '$1', $html);
// نمایش متن باقیمانده
echo $cleanedText;
?>
من می خوام همه ی لینک هایی که با ?q=
شروع می شن رو حذف کنم و فقط متن لینک باقی بمونه ولی این کدی که دارم اینکارو نمی کنه ممنون می شم بررسی کنید.
با تشکر
قسمت عبارات باقاعده در تابع preg_replace را به صورت زیر تغییر دهید:
$cleanedText = preg_replace('/<a href="\?q=[^"]*">([^<]*)<\/a>/', '$1', $html);
باید کاراکترهای خاص دستوری مانند ? و / را با افزودن \ (بک اسلش) خنثی سازی کنیم.عباسی
۱۹:۵۴ ۱۴۰۳/۱۰/۲۸
با سلام و خسته نباشید
چطوری می تونم با یک الگو متن داخل کد زیر رو پیدا کنم:
چطوری می تونم با یک الگو متن داخل کد زیر رو پیدا کنم:
$text = '<meta property="og:site_name" content="mysite"><meta property="og:description" content="این یک مطلب تست است لطفا برای ادامه مطلب با ما تماس بگیرید: @ThisName @MyName"><meta property="twitter:title" content="mayname">';
با تشکراگر صرفا قسمت content در تگ og:description مد نظر است می توانید از نمونه کد زیر استفاده کنید:
preg_match('/property="og:description" content="([^"]+)">/i', $text, $matches);
print_r($matches);
echo $matches[1];
این کد با فرض ثابت بودن text ورودی است و اگر ورودی تغییر کند ممکن است کد کارایی نداشته باشد و باید متناسب با ورودی جدید الگوریتم پویا نوشته شود.سیدعباسی
۰۷:۰۶ ۱۴۰۳/۰۹/۰۴
با تشکر از شما استاد بزرگوار
تست کردم واسه اعداد بزرگتر بالا و پایین می کنه و صحیح نیست مثلا از یک تا ۹ عمل می کنه ولی اگه بشه ۱۰ به بالا ترتیب رو یه جور دیگه می نویسه لینکها بصورتی که نوشتم و شما جواب دادید هستن وقتی از یکان ۹ میره به هر عددی ترتیب قاطی میشه بعد از کدی که دادید لینک های من به این ترتیب مرتب می شن
با تشکر از لطف و محبت شما
تست کردم واسه اعداد بزرگتر بالا و پایین می کنه و صحیح نیست مثلا از یک تا ۹ عمل می کنه ولی اگه بشه ۱۰ به بالا ترتیب رو یه جور دیگه می نویسه لینکها بصورتی که نوشتم و شما جواب دادید هستن وقتی از یکان ۹ میره به هر عددی ترتیب قاطی میشه بعد از کدی که دادید لینک های من به این ترتیب مرتب می شن
$string = "
http://site.com/post/11
http://site.com/post/10
http://site.com/post/12
http://site.com/post/1
http://site.com/post/2
http://site.com/post/3
http://site.com/post/4
http://site.com/post/5
http://site.com/post/8
http://site.com/post/6
http://site.com/post/7
http://site.com/post/9
";
لینک ها همه بصورتی که براتون نوشتم هستند و من لازم دارم همین ها رو مرتب کنمبا تشکر از لطف و محبت شما
برای مرتب سازی بر اساس عدد موجود در انتهای لینک ها می توانید از نمونه کد زیر الگوبرداری کنید:
<?php
$string = "
http://site.com/post/11
http://site.com/post/12
http://site.com/post/6
http://site.com/post/7
";
$array = explode("\n", trim($string));
$filtered = array_unique(array_filter($array));
//print_r($filtered);
$numeric = array();
foreach($filtered as $key => $value){
$num = preg_match_all('/\d+/', $value, $numbers);
$num = end($numbers[0]);
$numeric[$key] = $num;
}
arsort($numeric);
//print_r($numeric);
$result = array();
foreach($numeric as $key => $value){
$result[$key] = $filtered[$key];
}
//print_r($result);
$string = implode("\n", $result);
echo "<br>\n" . $string;
?>
سیدعباسی
۱۲:۵۵ ۱۴۰۳/۰۹/۰۳
با تشکر از شما استاد
خیلی خوب بود کارم درست شد خدا خیرتون بده فقط یه سوال دیگه هم دارم چطوری string قبلی رو به ترتیب شناسه های مطلب نمایش بدم میخوام order by id desc باشه
با تشکر از لطف و محبت شما
خیلی خوب بود کارم درست شد خدا خیرتون بده فقط یه سوال دیگه هم دارم چطوری string قبلی رو به ترتیب شناسه های مطلب نمایش بدم میخوام order by id desc باشه
با تشکر از لطف و محبت شما
اگر الگوی لینک ها ثابت و مشابه هم (صرفا با اختلاف عدد آخر) باشد می توانید کد را به صورت نمونه زیر ویرایش و arsort را اضافه کنید:
.
.
.
$filtered = array_unique(array_filter($array));
arsort($filtered);
.
.
.
در غیر اینصورت باید تمام احتمالات ممکن مشخص و الگوریتم اختصاصی نوشته شود که فرایندی زمانبر است.سیدعباسی
۱۸:۱۲ ۱۴۰۳/۰۸/۳۰
با سلام و خسته نباشید
با تشکر از راهنمایی های شما کارم درست شد سپاسگزارم یه مشکل دارم من داده های به این شکل دارم که آرایه نیستند و string هست فقط توی هر خط یک لینک نوشته شده است، به این صورت:
با تشکر
با تشکر از راهنمایی های شما کارم درست شد سپاسگزارم یه مشکل دارم من داده های به این شکل دارم که آرایه نیستند و string هست فقط توی هر خط یک لینک نوشته شده است، به این صورت:
$string = "
http://s.com/post/779
http://s.com/post/779
http://s.com/post/728
http://s.com/post/769
http://s.com/post/768
http://s.com/post/767
";
اگه دقت کنید دو تا لینک اول تکراری هستند، و یکی هم پایین خالی است و هیچ لینکی نداره! ("خط آخر حاوی هیچ لینکی نیست") من می خوام تکرار رو حذف کنم و اون خط پایینی هم که هیچ لینکی نداره اونم حذف بشهبا تشکر
با توجه به توضیحات می توانید مقادیر خالی و تکراری را به روش زیر از رشته متنی حذف کنید:
<?php
$string = "
http://s.com/post/779
http://s.com/post/779
http://s.com/post/728
http://s.com/post/769
http://s.com/post/768
http://s.com/post/767
";
$array = explode("\n", trim($string));
$filtered = array_unique(array_filter($array));
print_r($filtered);
$string = implode("\n", $filtered);
echo "<br>\n" . $string;
?>
سیدعباسی
۱۹:۴۰ ۱۴۰۳/۰۸/۱۹
با تشکر از شما استاد
من مشکل خودم رو بصورت زیر حل کردم
اینم نمونه کد:
با تشکر
من مشکل خودم رو بصورت زیر حل کردم
حذف شد
الان یه مشکل فقط دارم اونم اینکه الگو باید حتما شامل https باشه چون هشتگ هارو بصورت کاراکتر ?q=%23
نشون میده و چون داخل href هست لینک اونارو هم عوض می کنهاینم نمونه کد:
حذف شد
من الگوی لینکی رو میخوام که شامل https باشه یه خواهشی هم دارم این قسمت که کاربران میان پیام می ذارن رو بصورت direction=auto
تغییر بدید چون وقتی کدهارو می نویسیم مشخص نیست چپ و راستش چی هست واسه همین چند شب پیش توی نوشتن کدها اشتباه کردمبا تشکر
خیلی ممنون از پیشنهاد شما، نسخه جدید ویرایشگر بخش نظرات سایت در حال آماده سازی است، در مورد مشکل مطرح شده می توانید عبارات باقاعده را به صورت زیر تغییر دهید:
$text = preg_replace('/(<a\s+href\s*=\s*")https?[^"]*(' . $search . ')[^"]*("\s*[^>]*>)/is', '$1' . $replace . '$3', $text);
سیدعباسی
۰۲:۲۱ ۱۴۰۳/۰۸/۱۶
با سلام و تشکر از شما
دست شما درد نکنه مشکل این کد چیه؟
دست شما درد نکنه مشکل این کد چیه؟
حذف شد
کار نمی کنهکد شما چندین خطای متفاوت در خط های مختلف دارد، لطفا دقیقا مشابه نمونه کد درج شده در یادداشت از کدها استفاده کنید، خطایابی اسکریپت های کاربران زمانبر است و جزء خدمات متداول سایت نیست.
سیدعباسی
۲۲:۴۰ ۱۴۰۳/۰۸/۱۴
با سلام و خسته نباشید
واسه حذف کپی رایت نمی خوام واسه لینک های خودم میخوام که تابعش رو داشته باشم بصورت عادی لینکها رو عوض می کنم ولی زمانبر هست حتی از توی دیتابیس هم عوض می کنم لینکها واسه کپی رایت و منبع چیزی نیست
واسه حذف کپی رایت نمی خوام واسه لینک های خودم میخوام که تابعش رو داشته باشم بصورت عادی لینکها رو عوض می کنم ولی زمانبر هست حتی از توی دیتابیس هم عوض می کنم لینکها واسه کپی رایت و منبع چیزی نیست
یادداشت قبلی ویرایش و نمونه کدها به متن شما اضافه شد.
سیدعباسی
۱۲:۳۱ ۱۴۰۳/۰۸/۱۳
با تشکر از شما درست شد
ببخشید یه سوال دیگه هم دارم چطور می تونم لینک یک مطلب رو پیدا کنم بعد بگم اگه لینک شامل مثلا google بود تبدیل به این لینک کن! و یا اگه متن شامل webgoo بود تبدیل به این لینک کن!لینک های من کاراکتر زیادی دارن و من نمی خوام همه ی کاراکتر رو براش سرچ کنم که بعد replace کنه لازم دارم با کلمات کلیدی لینکها رو سرچ کنم که اگه لینک شامل اون کلمه کلیدی بود همه ی مقدار لینک رو برام تغییر بده! مثلا یه متن اینطوری دارم:
ببخشید یه سوال دیگه هم دارم چطور می تونم لینک یک مطلب رو پیدا کنم بعد بگم اگه لینک شامل مثلا google بود تبدیل به این لینک کن! و یا اگه متن شامل webgoo بود تبدیل به این لینک کن!لینک های من کاراکتر زیادی دارن و من نمی خوام همه ی کاراکتر رو براش سرچ کنم که بعد replace کنه لازم دارم با کلمات کلیدی لینکها رو سرچ کنم که اگه لینک شامل اون کلمه کلیدی بود همه ی مقدار لینک رو برام تغییر بده! مثلا یه متن اینطوری دارم:
<?php
$text = '<p>از زمان معرفي CSS3 (در تاريخ چهاردهم آوريل سال 2000) تا کنون مباحث زيادي در مورد کاربرد قابليت هاي اين نسخه از CSS در طراحي صفحات وب بين توسعه دهنده گان و علاقمندان به<a href="https://links.com/post/32">اين موضوع</a>رد و بدل شده است، برخي بر اين عقيده اند که به کل بايد با شيوه سنتي و جلوه هاي مبتني بر ابزارهاي گرافيکي که با برنامه هايي نظير فتوشاپ خلق مي شوند و عناصر تصويري (فايل هاي با فرمت png، jpeg و...) و کد نويسي مبتني بر جاوا اسکريپت (JavaScript) خداحافظي کرد و تمام موارد اين چنين را با قابليت هاي CSS3 خلق نمود و در مقابل عده اي به دلايل مختلف همچنان روش هاي سنتي را بهترين و سازگارتر ين شيوه براي طراحي امکانات و جلوه هاي بصري وب قلمداد مي کنند، به هر صورت به نظر مي رسد اصرار بر هر دو روش ما را به بيراهه خواهد برد، چرا که نه تکيه صرف بر روش هاي سنتي کار درستي است و نه استفاده کورکورانه از<a href="https://sitelink.com/postid=59">قابليت هاي جديدي</a>که به تازگي معرفي مي شوند، از اين رو در اين آموزش قصد داريم ضمن آشنايي با پاره اي از قابليت هاي کاربردي CSS3 در طراحي جلوه هاي وب، از معايب و محدوديت هاي آنها نيز آگاه شويم.</p>';
$search_replace = array(
'sitelink' => 'https://mylink.com/newsid=32',
'testlink' => 'https://mylink.com/newsid=33'
);
foreach($search_replace as $search => $replace){
$text = preg_replace('/(<a\s+href\s*=\s*")[^"]*(' . $search . ')[^"]*("\s*>)/is', '$1' . $replace . '$3', $text);
}
echo $text;
?>
میخوام یه تابع داشته باشم که وقتی کلمه کلیدی sitelink رو برام توی متن پیدا میکنه کلا اون لینک رو برام عوض کنه و لینک رو تبدیل به این کنم:https://mylink.com/newsid=32
با تشکر فراوانمتاسفانه امکان راهنمایی در خصوص روش های مورد استفاده جهت حذف یا تغییر لینک کپی رایت مطالب سایت ها میسر نیست.
سیدعباسی
۱۴:۲۸ ۱۴۰۳/۰۸/۱۰
ببخشید کد قبلی اشتباه بود دقت نکرده بودم شرمنده کد اصلاح شده اینه
<?php
$url = file_get_contents("https://chert.blogfa.com/post/1");
$bloglink = preg_match('/<div class="posttags">(.*?)<\\/div>/ims', $url, $_blogtags);
if(empty($bloglink))
$bloglink = preg_match('/<div class=tags>(.*?)<\\/div>/ims', $url, $_blogtags);
$blogtags = str_replace(array(' برچسب ها', 'کلمات کلیدی: ', 'برچسبها: ', 'برچسبها:', 'برچسب ها : ', 'برچسب:', 'موضوع:', '|'), '', $_blogtags[1]);
$tag = nl2br($blogtags);
$tag = strip_tags(str_replace("\n",',',$tag));
$tag = str_replace(array('/', '+', '،', '#', '_', ' '),array(',', ',', ',', ',', ' ', ' '),$tag);
$tag = explode(',',$tag);
$tag = array_map('trim',$tag);
$i = 0;
$result = '';
foreach($tag as $_tag) {
$i++;
if($i > 20)
break;
if(empty($_tag))
continue;
$_tags = strip_tags(str_replace(' ', '_', $_tag));
if(!empty($_tags))
$result .= "#" . str_replace(' ', ' ', $_tags) . " \n";
}
echo $result;
?>
می خوام در انتها همه ی برچسب هارو داشته باشم با تشکر فراوانکد بالا بر اساس هدف شما ویرایش و اصلاح شد.
سیدعباسی
۱۴:۲۵ ۱۴۰۳/۰۸/۰۹
با سلام خسته نباشی
من از این تابع برای استخراج برچسب های سایتم استفاده می کنم
واسه من خروجی تابع فقط "روانشناسی فمینیسم " است که آخرین برچسب هست! در حالیکه من نیاز دارم همه برچسب ها رو داشته باشم
ممنون می شم بهم کمک کنید.
با تشکر فراوان
من از این تابع برای استخراج برچسب های سایتم استفاده می کنم
$bloglink = preg_match('/<div class=\"posttags\"[^>]*>(.*?)<\\/div>/ims', $_url, $_blogtags);
if(empty($bloglink))
$bloglink = preg_match('/<br>برچسبها:(.*?)<\\/div>/ims', $_url, $_blogtags);
$tag = nl2br($blogtags);
$tag = strip_tags(str_replace("\n",',',$tag));
$tag = str_replace($_2,'',$tag);
$tag = str_replace(array('/','+','،','#','_',' '), array(',',',',',',',',' ',' '), $tag);
$tag = explode(',',$tag);
$tag = array_map('trim',$tag);
foreach($tag as $_tag) {
$i++;
if($i>20)
break;
if(empty($_tag))
continue;
$_tag = $_tag;
$_tags = strip_tags(str_replace(' ', '_', $_tag));
if( ! empty($_tags))
$_tags = "#" . str_replace(' ', ' ', $_tags) . "\n";
}
تنها مشکلی که این تابع داره اینکه از بین هر چند تا برچسبی که باشه فقط برچسب آخر رو بهم نشون میده مثال: برچسبها: فمنیسم, نظریه های فمینیسم, زنان فمینیسم, روانشناسی فمینیسم واسه من خروجی تابع فقط "روانشناسی فمینیسم " است که آخرین برچسب هست! در حالیکه من نیاز دارم همه برچسب ها رو داشته باشم
ممنون می شم بهم کمک کنید.
با تشکر فراوان
هرچند کد به صورت مستقل قابل تست و اجرا نیست اما به نظر اگر قسمت آخر را به صورت زیر ویرایش کنیم می تواند در خروجی تاثیر داشته باشد:
$_tags .= "#" . str_replace(' ', ' ', $_tags) . "\n";
به جای = از =. استفاده کرده ایم.سیدعباسی
۱۹:۵۵ ۱۴۰۳/۰۸/۰۶
با تشکر از شما
مشکلم حل شد
خیلی ممنون از شما
یه سوال دیگه هم دارم البته ببخشید من یه textarea دارم که اطلاعاتش توی دیتابیس ذخیره میشه توی هر خط این کادر یه کلمه می نویسم که این کلمات رو replace کنم به کلماتی که توی یک textarea دیگه می نویسم مثلا نوشتم
با تشکر از لطف و محبت شما
مشکلم حل شد
خیلی ممنون از شما
یه سوال دیگه هم دارم البته ببخشید من یه textarea دارم که اطلاعاتش توی دیتابیس ذخیره میشه توی هر خط این کادر یه کلمه می نویسم که این کلمات رو replace کنم به کلماتی که توی یک textarea دیگه می نویسم مثلا نوشتم
متن اول
متن دوم
متن سوم
و ...
میخوام به نوشته اول
نوشته دوم
نوشته سوم
و ...
تغییر بدم یعنی هر خط این کد با هر خط کد پایین جایگزین بشه چون امکان داره متن و کلمات زیاد باشه میخوام اینطوری یه کدی داشته باشم که هر خط تابع اول رو با خط متناسبش توی تابع دوم جایگزین باشهبا تشکر از لطف و محبت شما
جزئیات سوالتان ناقص است، اگر صرفا متن پائین با متن بالا جایگزین می شود کافی است یک دستور UPDATE در دیتابیس اجرا کنید و اطلاعات ارسالی فیلد دوم را جایگزین اطلاعات موجود کنید، اما اگر هدف تغییر بخش های خاصی از متن در بین متنهای دیگری است که نمی خواهید آنها تغییر کنند ابتدا باید الگوی مشخصی داشته باشیم تا بتوانیم متناسب با الگو قانونی برای جستجو و جایگزینی تعریف کنیم، اگر الگو اصول واحدی در شرایط مختلف نداشته باشد کار سخت می شود و باید برنامه پیچیده ای نوشته شود تا همه حالت ها را پوشش دهد.
سیدعباسی
۱۱:۲۱ ۱۴۰۳/۰۸/۰۵
با سلام
ببخشید هی مزاحمتون میشم من یه پلاگین دارم برای خروجی گرفتن از sitemap لینکهایی که برام خروجی می گیره از بالا به پایین هست من میخوام از پستهای قدیمی به پستهای جدید بهم خروجی بده توضیحاتش رو توی کامنت قبلی گذاشتم
ببخشید هی مزاحمتون میشم من یه پلاگین دارم برای خروجی گرفتن از sitemap لینکهایی که برام خروجی می گیره از بالا به پایین هست من میخوام از پستهای قدیمی به پستهای جدید بهم خروجی بده توضیحاتش رو توی کامنت قبلی گذاشتم
حذف شد
با تشکر فراوانمتاسفانه تست و بررسی پلاگین ها به دلیل محدودیت زمان ممکن نیست، به نظر مشکل شما با راه حل یادداشت قبلی قابل حل است.
سیدعباسی
۱۱:۴۷ ۱۴۰۳/۰۸/۰۴
با تشکر از شما دوست عزیز خیلی خوب بود یه سوال دیگه هم دارم البته ببخشید وقتی از سایت مپ خروجی میگیریم؟ که لینکها رو نشون بده چطوری کاری کنیم لینکها رو از پایین به بالا نشون بده؟
مثلا همین کدی که برام نوشتید میخوام خروجی لینکها از پایین به بالا باشه از اعداد کم به زیاد ختم بشه
با تشکر فراوان
مثلا همین کدی که برام نوشتید میخوام خروجی لینکها از پایین به بالا باشه از اعداد کم به زیاد ختم بشه
با تشکر فراوان
<?php
$feed = file_get_contents('rss.xml');
if(strpos($feed, 'sitemap') !== false)
preg_match_all('|<url>(.*)</url>|Us', $feed, $m);
else
preg_match_all('|<item>(.*)</item>|Us', $feed, $m);
//print_r($m);
foreach($m[0] as $key => $value){
preg_match('/<loc>(.*)<\/loc>/s', $value, $loc);
//echo $loc[1];
if(preg_match('/((.*)[0-9]+$)/', $loc[1], $url)){
echo $url[0];
echo '<br>';
}
}
برای تغییر چینش خروجی فایل xml تابع array_reverse را به صورت نمونه زیر به کدها اضافه کنید:
foreach(array_reverse($m[0]) as $key => $value){
سیدعباسی
۱۴:۵۶ ۱۴۰۳/۰۷/۲۸
با تشکر از شما استاد خیلی خوب بود من میخوام فقط آخرین لینک رو بصورت خروجی داشته باشم که شامل post باشه یعنی فقط این
با تشکر از محبت شما
http://link.webgoo.com/post/225
مشکل قبلی من با کدهایی که داشتم این بود که همه ی لینکها رو بصورت خروجی بهم میداد یعنی اینم شامل می شدhttp://link.webgoo.com
که آدرس سایت بود و من می خواستم فقط آخرین لینک که شما post هست یه دونه رو بصورت خروجی داشته باشمبا تشکر از محبت شما
برای دریافت آخرین لینکی که در انتها به عدد ختم شده باشد کد یادداشت قبلی را در خطوط زیر ویرایش کنید (یک break اضافه کنید):
if(preg_match('/((.*)[0-9]+$)/', $loc[1], $url)){
echo $url[0];
echo '<br>';
break;
}
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.