نمایش قسمتی از متن و پاراگراف با 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 بدون استفاده از دیتابیس
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
ساخت منوی هوشمند با PHP و CSS
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
ساخت منوی هوشمند با PHP و CSS
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
دیدگاه
۱۴۵ دیدگاه برای این مطلب ارسال شده است.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
روناک قادری
۰۴:۴۹ ۱۴۰۱/۰۱/۰۸
با سلام و خسته نباشید
ببخشید بازم یه سوال دارم البته به بزرگواری خودتون ببخشید من می خوام داخل تگ های p اعداد رو حذف کنم هرچی عدد و نقطه و خط تیره هست پاک بشه و فقط متن بمونه
مثلا:
با تشکر فراوان
ببخشید بازم یه سوال دارم البته به بزرگواری خودتون ببخشید من می خوام داخل تگ های p اعداد رو حذف کنم هرچی عدد و نقطه و خط تیره هست پاک بشه و فقط متن بمونه
مثلا:
<p>2-3-6. ابعاد چهارگانهی دسترسی به حوزهی عمومی.. 50</p>
می خوام اینطوری بشه<p>ابعاد چهارگانهی دسترسی به حوزهی عمومی</p>
در انتها فقط متن ساده بمونه، پرانتز هم حذف نشه و اون بمونه مثلا اگه متن پرانتز داشت اونو حذف نکنه، کاراکترهای مجاز دو نقطه و کاراکتر ویرگول باشه و پرانتزها: ، ()
خیلی از لطف و محبت شما ممنون و سپاسگزارم سوالها و بی اطلاعیهای منو به بزرگی خودتون ببخشیدبا تشکر فراوان
مسئله ای نیست، برای حذف کاراکترهای دلخواه می توانید از تابع preg_match در PHP به شکل نمونه زیر استفاده کنید:
<?php
$str = '<p>2-3-6. ابعاد چهارگانهی دسترسی به حوزهی عمومی.. 50</p>';
$pattern = '/[0-9\.\-]+/i';
$replace = preg_replace($pattern, '', $str);
echo $replace;
?>
الگو صرفا مطابق با نمونه متن و خروجی مورد انتظار است.روناک قادری
۱۹:۵۰ ۱۴۰۱/۰۱/۰۸
با سلام و درود فراوان بر شما
از لطف و محبت شما بسیار ممنون و سپاسگزارم خیلی خوب بود فقط یه مشکلی داره من این پترن رو واسه تگ p فقط می خوام چون تگ <a> هم دارم که تگ آ نمی خوام شامل این خصوصیات بشه و این پترن فقط شامل حال اون باشه توی تگ a اگه عکسی چیزی باشه که عدد داشته باشه اونم پاک می کنه تگ های آ رو داخل تگ p قرار نمی دم که همه با هم یه خصوصیات رو به ارث نبرن یه چندتایی رو امتحان کردم هر چی داخل تگ a هم بود عوض کرد و عکس ها رو نشون نمیده
با تشکر فراوان
از لطف و محبت شما بسیار ممنون و سپاسگزارم خیلی خوب بود فقط یه مشکلی داره من این پترن رو واسه تگ p فقط می خوام چون تگ <a> هم دارم که تگ آ نمی خوام شامل این خصوصیات بشه و این پترن فقط شامل حال اون باشه توی تگ a اگه عکسی چیزی باشه که عدد داشته باشه اونم پاک می کنه تگ های آ رو داخل تگ p قرار نمی دم که همه با هم یه خصوصیات رو به ارث نبرن یه چندتایی رو امتحان کردم هر چی داخل تگ a هم بود عوض کرد و عکس ها رو نشون نمیده
با تشکر فراوان
لطفا کد زیر را با حالت های مختلف تست کنید، طبق بررسی ما مشکلی نبود:
<?php
$str = '<p>2-3-6. ابعاد چهارگانهی دسترسی به حوزهی عمومی.. 50</p><a href="#">2-3-6</a>';
$pattern = '/(<p[^>]*>.*)[0-9\.\-]+(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$2', $str);
}
echo $str;
?>
روناک قادری
۰۱:۲۳ ۱۴۰۱/۰۱/۰۹
این دفعه درست شد
بخدا خیلی خجالت می کشم هی ازتون سوال می کنم آدم نباید کسی که بهش محبت و خوبی می کنه انقد اذیت کنه و مزاحمش بشه تورو خدا حلال کنید انشاءالله خدا هزاران برابر محبتهایی که به مردم می کنید هم در دنیا و هم در قبامت به خودتون و تموم عزیزانتون عنایت کنه اینو الان امتحان کردم خیلی خوب بود دست گلتون درد نکنه
فقط یه مشکل کوچیک می مونه اگه داخل متن اینطوری باشه
الان تگ a رو دست نمی زنه و این خیلی خوبه انشاءالله منم دیگه مزاحتون نشم
دست گل پدر و مادرهای عزیزنتون رو می بوسم
بخدا خیلی خجالت می کشم هی ازتون سوال می کنم آدم نباید کسی که بهش محبت و خوبی می کنه انقد اذیت کنه و مزاحمش بشه تورو خدا حلال کنید انشاءالله خدا هزاران برابر محبتهایی که به مردم می کنید هم در دنیا و هم در قبامت به خودتون و تموم عزیزانتون عنایت کنه اینو الان امتحان کردم خیلی خوب بود دست گلتون درد نکنه
فقط یه مشکل کوچیک می مونه اگه داخل متن اینطوری باشه
2-14-2. مدل کارور و شی یر (1990)....46
داخل پرانتر عددها رو پاک می کنه و فقط پرانتزها می مونه واسه بقیه جاها خیلی عالی کار می کنهالان تگ a رو دست نمی زنه و این خیلی خوبه انشاءالله منم دیگه مزاحتون نشم
دست گل پدر و مادرهای عزیزنتون رو می بوسم
خواهش، موردی ندارد، برای اینکه اعداد داخل پرانتر حذف نشوند از نمونه کد زیر استفاده کنید:
<?php
$str = '<p>2-14-2 . مدل کارور و شی یر (1990) ..... 46 مدل کارور و شی یر</p>';
$pattern = '/(<p[^>]*>.*|<p[^>]*>.*\))([0-9\.\-]+(?=[^\)]*(?:[\(])))(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$pattern = '/(<p[^>]*>.*\).*)([0-9\.\-]+)(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
echo $str;
?>
لطفا دقت کنید این شیوه برای کارهای حساس خیلی توصیه نمی شود و با توجه به طیف وسیعی که ورودی ها ممکن است داشته باشند می تواند دچار خطا شود، حتما قبل از استفاده با حداکثر الگوهای مختلف تست کنید.روناک قادری
۱۹:۳۳ ۱۴۰۱/۰۱/۰۹
از لطف و محبت شما بسیار ممنون و سپاسگزارم
خدا خیرتون بده خیلی عالی بود درست کار می کنه نه حواسم هست فقط واسه محتویات بعضی مطالب ازش استفاده می کنم اونم به این صورت که باید رمز تغییر رو وارد کنم بدون وارد کردن رمز چیزی عوض نمیشه وقتی رمز تغییر میزنم تݝییرات اعمال میشه اگه تغییرات اونی که میخواستم نبود باز یه رمز دیگه میزنم که تغییرات به حالت اصلی برمی گرده خیلی عالی بود اونی بود که من می خواستم
دست گلتون درد نکنه
ببخشید چرا من این دستور رو توی دیتابییس میزنم با اینکه از این کاراکتد خیلی موجوده ولی عمل نمی کنه؟
مثال:
نمی دونم چرا
خدا خیرتون بده خیلی عالی بود درست کار می کنه نه حواسم هست فقط واسه محتویات بعضی مطالب ازش استفاده می کنم اونم به این صورت که باید رمز تغییر رو وارد کنم بدون وارد کردن رمز چیزی عوض نمیشه وقتی رمز تغییر میزنم تݝییرات اعمال میشه اگه تغییرات اونی که میخواستم نبود باز یه رمز دیگه میزنم که تغییرات به حالت اصلی برمی گرده خیلی عالی بود اونی بود که من می خواستم
دست گلتون درد نکنه
ببخشید چرا من این دستور رو توی دیتابییس میزنم با اینکه از این کاراکتد خیلی موجوده ولی عمل نمی کنه؟
update post set content = replace(content," ","");
واسه ویرایش مطالب هم نوشتم که با ویرایش کردن این کاراکتر پاک بشه ولی واسه اونم کار نمی کنه قبلا پاک می کردـمثال:
دارد (به شیوه APA)</span></li>
توش پر از این کاراکتر هست ولی با زدن دستور عمل نمی کنه و میگه هیچ چیزی عوض نشد!نمی دونم چرا
طبق تست ما کد مشکلی ندارد، ممکن است اطلاعات به شکلی که می بینید در دیتابیس ذخیره نشده باشند، به فرض کاراکتر & می تواند به معادل آن یعنی
&
تبدیل شده باشد یا نسخه MySQL از تابع REPLACE به خوبی پشتیبانی نکند، همچنین شما باید قسمت WHERE را در پرس و جو در نظر بگیرید و جدول هم یک PRIMARY KEY یا UNIQUE Index داشته باشد.https://dev.mysql.com/doc/refman/8.0/en/replace.html
روناک قادری
۱۲:۴۷ ۱۴۰۱/۰۱/۱۱
با سلام و خسته نباشید
ببخشید باز مزاحمتون شدم شرمنده این الگو که بهم داده بودید خیلی خوبه فقط باز یه مشکلی داره!
ببخشید باز مزاحمتون شدم شرمنده این الگو که بهم داده بودید خیلی خوبه فقط باز یه مشکلی داره!
<?php
$str = '<p>2-14-2 . مدل کارور و شی یر (1990) ..... 46 مدل کارور و شی یر</p>';
$pattern = '/(<p[^>]*>.*|<p[^>]*>.*\))([0-9\.\-](?=[^\)]*(?:[\(])))(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$pattern = '/(<p[^>]*>.*\).*)([0-9\.\-]+)(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
اگه متن بصورت یه خرده تو در تو باشه و بعد p تگ span باشه هیچ بلایی سر متن نمیاره!<p><span>1– 3 واسازی معرفت، هدف و کارکرد سیاست...................... 41</span></p>
اینطوری هیچ کاری به کارش نداره :-(همان طور که قبلا گفتیم برای موارد اینچنین که الگوها می توانند متغیر باشند نوشتن یک دستور واحد به سختی امکانپذیر است، در هر صورت مطابق با آخرین الگوی ورودی می توانید از شیوه زیر استفاده کنید:
<?php
$str = '<p><span>1– 3 واسازی معرفت، هدف و کارکرد سیاست...................... 41</span></p>';
$pattern = '/(<p[^>]*>.*|<p[^>]*>.*\))([0-9\.\-\–]+(?=[^\)]*(?:[\(])))(.*<\/p>)/mui';
$str = str_replace('</p>', '(just_for_pattern_edhjkl)</p>', $str);
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$pattern = '/(<p[^>]*>.*\).*)([0-9\.\-\–]+)(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$str = str_replace('(just_for_pattern_edhjkl)</p>', '</p>', $str);
echo $str;
?>
روناک قادری
۱۳:۳۰ ۱۴۰۱/۰۱/۱۱
با سلام
ببخشید یه سوال دیگه هم دارم البته بخدا شرمنده توی دیتابیس چطور می شه این اینترنتها رو عوض کرد؟ واسه همه چی بلدم فقط واسه اینهایی که خط به خط هستند نمی دونم مثلا اینطوری
که اونم بلد نبودم! الگوی خطی اونو چطوری وارد می کنند؟
مثلا اینطوری
ببخشید یه سوال دیگه هم دارم البته بخدا شرمنده توی دیتابیس چطور می شه این اینترنتها رو عوض کرد؟ واسه همه چی بلدم فقط واسه اینهایی که خط به خط هستند نمی دونم مثلا اینطوری
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
اگه توی یه خط باشند مشکلی ندارم باهاشون ولی وقتی هر کدوم توی یه خط هستند نمی دونم چکارشون کنم مثلا می خوام همه اینها رو تبدیل به یکی کنمupdate post set content = replace(content,"<br><br><br><br>","<br>");
واسه fie_get_contents هم بعضی وقتها برام پیش اومده که الگو رو باید اینطوری خطی وارد می کردمکه اونم بلد نبودم! الگوی خطی اونو چطوری وارد می کنند؟
مثلا اینطوری
<div class='main'>
<div class='menu'>
چطون اگه تنهایی وارد می کردم با تگ های دیگه هم مشترک بودن!در دیتابیس اگر MySQL نسخه 8.0.12 به بعد باشد با تابع REGEXP_REPLACE در غیر اینصورت با تابع REPLACE می توانید کاراکتر خط شکن (Line Break) را به صورت نمونه زیر لحاظ کنید:
SELECT REPLACE((SELECT `col` FROM tbl WHERE `id` = 1), "<br>\r\n<br>\r\n<br>\r\n<br>", '<br>')
در واقع در اغلب موارد rn نماد خط شکن است و گاهی صرفا n یا r خط جدید را ایجاد می کنند، برای نادیده گرفتن خط جدید در توابع PHP می توانید از نمونه کد زیر الگوبرداری کنید:<?php
$str = "<div class='main'>
<div class='menu'>";
$pattern = '/<div class=\'([^\']+)\'>([\r\n]*)<div class=\'([^\']+)\'>/im';
$str = preg_replace($pattern, 'class for div 1: $1 , class for div 2: $3', $str);
echo $str;
?>
روناک قادری
۱۹:۰۲ ۱۴۰۱/۰۱/۱۱
با سلام
دست گلتون درد نکنه درست شد خدا خیرتون بده ببخشید این مدت خیلی مزاحمتون شدم ازتون خیلی چیزا یاد گرفتم انشاءالله به تموم آرزوهاتون برسید با تشکر فراوان این حالت پاسخ کپچا رو هم درست کردید الان دیدم خیلی عالی شده
بازم از لطف و محبتتون بسیار ممنون و سپاسگزارم
دست گلتون درد نکنه درست شد خدا خیرتون بده ببخشید این مدت خیلی مزاحمتون شدم ازتون خیلی چیزا یاد گرفتم انشاءالله به تموم آرزوهاتون برسید با تشکر فراوان این حالت پاسخ کپچا رو هم درست کردید الان دیدم خیلی عالی شده
بازم از لطف و محبتتون بسیار ممنون و سپاسگزارم
خواهش، خوشحالیم که مشکل رفع شد.
۰۰:۰۰ ۱۴۰۱/۰۸/۳۰
سلام من از نمونه کد
ممنون میشم راهنمایی کنید
با تشکر
<?php
$content = file_get_contents('http:/example.com/');
$title = preg_match("/<!DOCTYPE html[^>]*>(.*?)<\\/body>/ims", $content, $match);
echo $match[1];
?>
برای نمایش قسمتی از سایت دیگه استفاده میکنم مشکلم اینه بعضی از سایت ها برداشت مطلب با این تابع رو بستن یعنی فکر میکنم دسترسی ربات ها رو بستن جایگزین این کد چه تابع یا نمونه کد هست؟ممنون میشم راهنمایی کنید
با تشکر
اگر با تابع file_get_contents با مشکل مسدود شدن دسترسی مواجه می شوید می توانید روش تابع curl را با تنظیم اطلاعات واسط کاربری امتحان کنید، مثال:
نکته: محتوای برخی از سایت ها به صورت داینامیک ایجاد می شود به این صورت که وقتی صفحه سایت را در مرورگر بارگذاری می کنیم در مرحله بعد با اجرای دستورات جاوا اسکریپتی و ای جکس محتوای اصلی ایجاد می شود، در اینصورت استفاده از این روش ها کمکی به حل مشکل نمی کند و عملا روشی برای دریافت محتوای اینگونه سایت ها با کدنویسی وجود ندارد.
<?php
$agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0';
$curl = curl_init('http://www.example.com/');
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
$content = curl_exec($curl);
curl_close($curl);
$title = preg_match("/<!DOCTYPE html[^>]*>(.*?)<\\/body>/ims", $content, $match);
echo $match[1];
?>
البته این تابع تنظیمات دیگری هم دارد که در صورت نیاز می توانید در وب جستجو کنید.نکته: محتوای برخی از سایت ها به صورت داینامیک ایجاد می شود به این صورت که وقتی صفحه سایت را در مرورگر بارگذاری می کنیم در مرحله بعد با اجرای دستورات جاوا اسکریپتی و ای جکس محتوای اصلی ایجاد می شود، در اینصورت استفاده از این روش ها کمکی به حل مشکل نمی کند و عملا روشی برای دریافت محتوای اینگونه سایت ها با کدنویسی وجود ندارد.
امیرحسین
۱۶:۴۵ ۱۴۰۲/۰۴/۱۵
با تشکر از توضیحات مفیدی که دادید
استاد من می خوام از نوشته های یک متن که bold کرده ام بعنوان کلمات کلیدی استفاده کنم و می خوام این نوشته ها رو استخراج کنم
یعنی هرچقدر سرتیتر bold داشته باشم استخراج بشه و از اونا واسه تگ و برچسب استفاده کنم ممنون میشم به من کمک کنید. چون مجبورم همیشه تک تک کلماتی که bold کرده ام رو دستی وارد کنم.
با تشکر از لطف و محبت شما
استاد من می خوام از نوشته های یک متن که bold کرده ام بعنوان کلمات کلیدی استفاده کنم و می خوام این نوشته ها رو استخراج کنم
یعنی هرچقدر سرتیتر bold داشته باشم استخراج بشه و از اونا واسه تگ و برچسب استفاده کنم ممنون میشم به من کمک کنید. چون مجبورم همیشه تک تک کلماتی که bold کرده ام رو دستی وارد کنم.
با تشکر از لطف و محبت شما
برای پیدا کردن و استخراج محتوای داخل تگ های bold شده در PHP می توانیم یکی از روش های عبارات باقاعده در کنار تابع preg_match_all یا DOMDocument و تجزیه تگ متن را انتخاب کنیم، مثال:
<?php
$string = 'this is a test text for find <b>bold</b> titles in <b>PHP</b> programming...';
echo 'method 1:<br>';
preg_match_all('/<b>(.*?)<\/b>/si', $string, $matches);
//print_r($matches);
foreach($matches[1] as $key => $value) {
echo 'label: ' . $value . '<br>';
}
echo '--------------------------<br>';
echo 'method 2:<br>';
$dom = new DOMDocument;
@$dom->loadHTML(mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8'));
$bolds = $dom->getElementsByTagName('b');
for($i = 0; $i < $bolds->length; $i++) {
$value = $bolds->item($i)->nodeValue;
echo 'label: ' . $value . '<br>';
}
?>
در این نمونه کدها فرض بر این است که از تگ های b در سورس متن استفاده شده، در صورتی که از تگ های strong یا موارد دیگر استفاده می کنید قاعدتا باید قسمت هایی از کدها را ویرایش کنید.سینا
۰۸:۲۶ ۱۴۰۲/۰۶/۲۵
با سلام و خسته نباشید
من برای ترجمه متن از گوگل ترانسلیت استفاده می کنم یه مشکلی که دارم اینکه وقتی متنی رو برام ترجمه می کنه کلمات و جملات داخل پرانتز و اصطلاحات رو ترجمه نمی کنه مثلا وقتی یه متن همه اش فارسی باشه ولی داخل پرانتزها اصطلاحی نوشته باشه که انگلیسی باشه اونو ترجمه نمی کنه! فقط تنهایی اون قسمتا رو باید ترجمه کنم می خوام کدی در اختیار داشته باشم که فارغ از اینکه متن انگلیسی باشه و یا هرچیزی همه رو به اون زبانی که میخوام ترجمه کنه
با تشکر
من برای ترجمه متن از گوگل ترانسلیت استفاده می کنم یه مشکلی که دارم اینکه وقتی متنی رو برام ترجمه می کنه کلمات و جملات داخل پرانتز و اصطلاحات رو ترجمه نمی کنه مثلا وقتی یه متن همه اش فارسی باشه ولی داخل پرانتزها اصطلاحی نوشته باشه که انگلیسی باشه اونو ترجمه نمی کنه! فقط تنهایی اون قسمتا رو باید ترجمه کنم می خوام کدی در اختیار داشته باشم که فارغ از اینکه متن انگلیسی باشه و یا هرچیزی همه رو به اون زبانی که میخوام ترجمه کنه
با تشکر
متاسفانه ما چنین کدی در اختیار نداریم و نوشتن آن هم فرآیندی زمانبر است و شامل خدمات سایت نمی شود، اما اگر کدی دارید که نیاز به راهنمایی و اصلاح دارد می توانیم در بخش هایی کمکتان کنیم.
hossein
۲۳:۱۲ ۱۴۰۲/۰۷/۱۴
سلام وقت شما بخیر
ممنون میشم اگه راهنماییم کنید میخوام کدی در اختیارم بزارید که بتونه برام سقف درصد مدیر را تعیین کنه توی افزونه (چند فروشندگی) دکان برای مثال: سهم مدیر سایت ۷ درصد میباشد تا حداکثر مبلغ ۳۵ هزار تومان، اگه محصولی مثلا قیمتش یک میلیون باشه دیگه درصد حساب نکنه همون مبلغ ثابت رو در نظر بگیره
ممنون میشم اگه راهنماییم کنید میخوام کدی در اختیارم بزارید که بتونه برام سقف درصد مدیر را تعیین کنه توی افزونه (چند فروشندگی) دکان برای مثال: سهم مدیر سایت ۷ درصد میباشد تا حداکثر مبلغ ۳۵ هزار تومان، اگه محصولی مثلا قیمتش یک میلیون باشه دیگه درصد حساب نکنه همون مبلغ ثابت رو در نظر بگیره
کد مورد نظر شما نیازمند دسترسی به افزونه، آزمایش و خطا و سفارشی سازی اختصاصی آن می باشد که فرآیندی زمانبر است و متاسفانه در چارچوب خدمات ما قرار نمی گیرد.
hossein
۱۸:۵۶ ۱۴۰۲/۰۷/۲۵
سلام وقت شما بخیر
کدی هست که بشود با کمک اون، به محض حذف محصول توسط فروشندگان (افزونه دکان)، تصاویر محصول نیز حذف شوند و نیازی به حذف تصاویر بعد از حذف محصول نباشد
ممنونم
کدی هست که بشود با کمک اون، به محض حذف محصول توسط فروشندگان (افزونه دکان)، تصاویر محصول نیز حذف شوند و نیازی به حذف تصاویر بعد از حذف محصول نباشد
ممنونم
با تابع unlink در PHP می توانید فایل مورد نظر را حذف کنید منتها کار با این تابع نیازمند تجربه قبلی و تعریف دقیق آدرس فایل است و در صورت اشتباه در تنظیم آدرس می تواند منجر به حذف ناخواسته دایرکتوری ها یا فایل های دیگر شود!
https://www.php.net/manual/en/function.unlink.php
همچنین با توجه به استفاده از افزونه خاص باید کدهای این افزونه در قسمتی که وظیفه حذف اطلاعات را دارد ویرایش شوند که فرآیندی زمانبر است و نیاز به دسترسی سرور و آشنایی با ساختار افزونه مورد نظر دارد.بهاره هوشمندی
۰۲:۳۷ ۱۴۰۲/۰۸/۳۰
با سلام و خسته نباشید استاد بزرگوار
آیا راهی وجود داره تفاوت دو تا متن رو با php پیدا کرد؟
مثلا
آیا راهی وجود داره تفاوت دو تا متن رو با php پیدا کرد؟
مثلا
text = "این یک متن تکست هست";
text = "این، یک متن تکست هست";
با تشکردقیقا مشخص نکرده اید خروجی مد نظرتان باید به چه شکلی باشد اما توابع آماده ای برای نمایش تفاوت های دو متن در وب وجود دارد، نمونه کد:
به روزرسانی: امکان فرمت تگ های HTML و نمایش موارد تغییر کرده به صورت انیمیشن به کد اضافه شد.
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<style>
.deleted {
color: #E4041A;
animation: deleted-blink 1s infinite;
}
@keyframes deleted-blink {
0% {color: #E4041A;}
75% {color: transparent;}
100% {color: #E4041A;}
}
.inserted {
color: #447F1C;
animation: inserted-blink 1s infinite;
}
@keyframes inserted-blink {
0% {color: #447F1C;}
75% {color: transparent;}
100% {color: #447F1C;}
}
</style>
</head>
<?php
function computeDiff($from, $to) {
$diffValues = array();
$diffMask = array();
$dm = array();
$n1 = count($from);
$n2 = count($to);
for($j = -1; $j < $n2; $j++) $dm[-1][$j] = 0;
for($i = -1; $i < $n1; $i++) $dm[$i][-1] = 0;
for($i = 0; $i < $n1; $i++) {
for($j = 0; $j < $n2; $j++) {
if($from[$i] == $to[$j]) {
$ad = $dm[$i - 1][$j - 1];
$dm[$i][$j] = $ad + 1;
} else {
$a1 = $dm[$i - 1][$j];
$a2 = $dm[$i][$j - 1];
$dm[$i][$j] = max($a1, $a2);
}
}
}
$i = $n1 - 1;
$j = $n2 - 1;
while(($i > -1) || ($j > -1)) {
if($j > -1) {
if($dm[$i][$j - 1] == $dm[$i][$j]) {
$diffValues[] = $to[$j];
$diffMask[] = 1;
$j--;
continue;
}
}
if($i > -1) {
if($dm[$i - 1][$j] == $dm[$i][$j]) {
$diffValues[] = $from[$i];
$diffMask[] = -1;
$i--;
continue;
}
}
{
$diffValues[] = $from[$i];
$diffMask[] = 0;
$i--;
$j--;
}
}
$diffValues = array_reverse($diffValues);
$diffMask = array_reverse($diffMask);
return array('values' => $diffValues, 'mask' => $diffMask);
}
function diffline($line1, $line2) {
$diff = computeDiff(str_split($line1), str_split($line2));
$diffval = $diff['values'];
$diffmask = $diff['mask'];
$n = count($diffval);
$pmc = 0;
$result = '';
for($i = 0; $i < $n; $i++) {
$mc = $diffmask[$i];
if($mc != $pmc) {
switch($pmc) {
case -1:
$result .= '[-end_del-]';
break;
case 1:
$result .= '[-end_ins-]';
break;
}
switch($mc) {
case -1:
$result .= '[-start_del-]';
break;
case 1:
$result .= '[-start_ins-]';
break;
}
}
$result .= $diffval[$i];
$pmc = $mc;
}
switch($pmc) {
case -1:
$result .= '[-end_del-]';
break;
case 1:
$result .= '[-end_ins-]';
break;
}
$result = htmlentities($result);
$result = str_replace('[-start_del-]', '<span class="deleted">', $result);
$result = str_replace('[-end_del-]', '</span>', $result);
$result = str_replace('[-start_ins-]', '<span class="inserted">', $result);
$result = str_replace('[-end_ins-]', '</span>', $result);
return $result;
}
$text_1 = 'این یک <b>متن</b> تکست هست';
$text_2 = 'این، یک متن تکست هست';
echo diffline($text_1, $text_2);
?>
</html>
در این نمونه کد زیر کاراکترهای متفاوت خط کشیده می شود.به روزرسانی: امکان فرمت تگ های HTML و نمایش موارد تغییر کرده به صورت انیمیشن به کد اضافه شد.
بهاره هوشمندی
۰۱:۲۴ ۱۴۰۲/۰۹/۰۱
با سلام و از شما
من این کد رو امتحان کردم واسه متن عادی خوبه و جواب میده ولی واسه متن طولانی که رنگ متن عوض شده باشه توی خروجی هم همه استایلی که بهش دادیم رو یک دست می کنه اگه جایی متن رو bold کرده باشیم بازم تا آخر اون متن خروجی رو bold می کنه می خوام خروجی که میده بصورت decode باشه و مشخص بشه کجا تغییر صورت گرفته و اینکه اگه خروجی هم به این شکل نبود فقط توی خروجی تغییرات نگارشی و ویرایشی رو نشون بده که بفهمم چی به چی شده من می خوام بدونم یک متن از اول که چی بوده با ویرایش کجاهاش تغییر کرده بصورت نوشتاری ببینم تغییرات به چه شکلی لحاظ شده الان هر استایلی که متن به خودش گرفته باشه توی خروجی همه رو تا پاراگراف آخر نشون میده و مشخص نمیشه چه اتفاقی افتاده!
با تشکر از شما
من این کد رو امتحان کردم واسه متن عادی خوبه و جواب میده ولی واسه متن طولانی که رنگ متن عوض شده باشه توی خروجی هم همه استایلی که بهش دادیم رو یک دست می کنه اگه جایی متن رو bold کرده باشیم بازم تا آخر اون متن خروجی رو bold می کنه می خوام خروجی که میده بصورت decode باشه و مشخص بشه کجا تغییر صورت گرفته و اینکه اگه خروجی هم به این شکل نبود فقط توی خروجی تغییرات نگارشی و ویرایشی رو نشون بده که بفهمم چی به چی شده من می خوام بدونم یک متن از اول که چی بوده با ویرایش کجاهاش تغییر کرده بصورت نوشتاری ببینم تغییرات به چه شکلی لحاظ شده الان هر استایلی که متن به خودش گرفته باشه توی خروجی همه رو تا پاراگراف آخر نشون میده و مشخص نمیشه چه اتفاقی افتاده!
با تشکر از شما
تابع پاسخ قبل را مطابق با توضیحات شما ویرایش کردیم، در این تابع تگ های اختصاصی به صورت [-tag_name-] استفاده شده که نباید از قبل در سورس های شما موجود باشد.
بهاره هوشمندی
۱۲:۳۹ ۱۴۰۲/۰۹/۰۱
با سلام استاد بزرگوار
از لطف و محبت شما بسیار ممنون و سپاسگزارم خیلی عالی بود
اینطوری خیلی خوب شد دستتون درد نکنه ان شاءالله همواره تنتون سالم باشه و دلتون خوش خیلی کارم رو راه میندازه
یه دنیا ازتون ممنونم
از لطف و محبت شما بسیار ممنون و سپاسگزارم خیلی عالی بود
اینطوری خیلی خوب شد دستتون درد نکنه ان شاءالله همواره تنتون سالم باشه و دلتون خوش خیلی کارم رو راه میندازه
یه دنیا ازتون ممنونم
خواهش، نظر لطف شما است، خوشحالیم اگر کمکی کرده باشیم.
آخرین دیدگاه ها
برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
رضا
ممنونم از شما بابت وقتی که گذاشتید و پاسخ دادین. بی صبرانه منتظر برنامه شما هستیم. راستی یه سوال خدمت شما داشتم. بهترین راه...۱۴۰۳/۰۹/۲۷
رضا
اصلاح می کنم دیکودر ایرانی یون ۱۲ هم گویا پیدا شده امان از دست ...۱۴۰۳/۰۹/۲۱
رضا
سلام ممنون برای پاسخ خوبتون. فرمودین <نکته 1: با مبهم سازی، سورس ها همچنان قابل کپی هستند منتها برای انسان گیج کننده، نامفهوم و...۱۴۰۳/۰۹/۲۱
رضا
سلام من چند ماهی هست که کلی روی یه پروژه سیستم مدیریت محتوا با زبان php کار کردم و پروژه کامل شده. قصد...۱۴۰۳/۰۹/۲۰
ناشناس
سلام خسته نباشید وقتتون بخیر چطور می تونم با استفاده از حلقه وایل بزرگ ترین و کوچک ترین عدد را از بین چند عدد پیدا...۱۴۰۳/۰۹/۱۸
علایی
با سلام و درود بی پایان و خوشحالم که با این سایت آشنا شدم بنده وردپرس کار هستم اگه لطف بکنید و نحوه شمسی سازی...۱۴۰۳/۰۹/۱۲
روزمرگی های یک مهندس عمران
در جستجوی یک مطلب در مورد مهندسی عمران داشتم میگشتم که رسیدم به این سایت وبگو که یک سایت تخصصی آموزش برنامه نویسی وب و...۱۴۰۳/۰۹/۱۱
روزمرگی های یک مهندس عمران
من یک وبلاگ در بلاگ اسپات دارم و میخوام موتور جستجوی گوگل در وبلاگ استفاده کنم، پرسشم اینه که آیا خود بلاگر این ابزار را...۱۴۰۳/۰۹/۰۹
سیدعباسی
با تشکر از شما استاد بزرگوار تست کردم واسه اعداد بزرگتر بالا و پایین می کنه و صحیح نیست مثلا از یک تا ۹...۱۴۰۳/۰۹/۰۴
هیوا
سلام ببخشید من کد زنی رو بصورت آموزش شروع کردم اما اینکه چطور صفحه رو رفرش کنم که همزمان ببینم کدهایی که میزنم تاچه حد...۱۴۰۳/۰۹/۰۳
سیدعباسی
با تشکر از شما استاد خیلی خوب بود کارم درست شد خدا خیرتون بده فقط یه سوال دیگه هم دارم چطوری string قبلی رو...۱۴۰۳/۰۹/۰۳
سیدعباسی
با سلام و خسته نباشید با تشکر از راهنمایی های شما کارم درست شد سپاسگزارم یه مشکل دارم من داده های به این شکل...۱۴۰۳/۰۸/۳۰
ایمان
سلام و عرض ادب شکل و شمایل سایتم در موبایل و فایر فاکس درست است در کروم به هم ریخته امکان داره کمکم کنید۱۴۰۳/۰۸/۲۹
سیدعباسی
با تشکر از شما استاد من مشکل خودم رو بصورت زیر حل کردم تغییر بدید چون وقتی کدهارو می نویسیم مشخص نیست...۱۴۰۳/۰۸/۱۹
سیدعباسی
با سلام و تشکر از شما دست شما درد نکنه مشکل این کد چیه؟ کار نمی کنه۱۴۰۳/۰۸/۱۶
سیدعباسی
با سلام و خسته نباشید واسه حذف کپی رایت نمی خوام واسه لینک های خودم میخوام که تابعش رو داشته باشم بصورت عادی لینکها...۱۴۰۳/۰۸/۱۴
سیدعباسی
با تشکر از شما درست شد ببخشید یه سوال دیگه هم دارم چطور می تونم لینک یک مطلب رو پیدا کنم بعد بگم اگه...۱۴۰۳/۰۸/۱۳
سیدعباسی
ببخشید کد قبلی اشتباه بود دقت نکرده بودم شرمنده کد اصلاح شده اینه می خوام در انتها همه ی برچسب هارو داشته باشم با...۱۴۰۳/۰۸/۱۰
سیدعباسی
با سلام خسته نباشی من از این تابع برای استخراج برچسب های سایتم استفاده می کنم تنها مشکلی که این تابع داره اینکه...۱۴۰۳/۰۸/۰۹
سیدعباسی
با تشکر از شما مشکلم حل شد خیلی ممنون از شما یه سوال دیگه هم دارم البته ببخشید من یه textarea دارم...۱۴۰۳/۰۸/۰۶
سیدعباسی
با سلام ببخشید هی مزاحمتون میشم من یه پلاگین دارم برای خروجی گرفتن از sitemap لینکهایی که برام خروجی می گیره از بالا به...۱۴۰۳/۰۸/۰۵
سیدعباسی
با تشکر از شما دوست عزیز خیلی خوب بود یه سوال دیگه هم دارم البته ببخشید وقتی از سایت مپ خروجی میگیریم؟ که لینکها رو...۱۴۰۳/۰۸/۰۴
در انتظار بررسی: ۰
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.