نمایش قسمتی از متن و پاراگراف با 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

آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
تبدیل تاریخ میلادی، شمسی با مبدل 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 یا موارد دیگر استفاده می کنید قاعدتا باید قسمت هایی از کدها را ویرایش کنید.سینا
۰۸:۲۶ ۱۴۰۲/۰۶/۲۵
با سلام و خسته نباشید
من برای ترجمه متن از گوگل ترانسلیت استفاده می کنم یه مشکلی که دارم اینکه وقتی متنی رو برام ترجمه می کنه کلمات و جملات داخل پرانتز و اصطلاحات رو ترجمه نمی کنه مثلا وقتی یه متن همه اش فارسی باشه ولی داخل پرانتزها اصطلاحی نوشته باشه که انگلیسی باشه اونو ترجمه نمی کنه! فقط تنهایی اون قسمتا رو باید ترجمه کنم می خوام کدی در اختیار داشته باشم که فارغ از اینکه متن انگلیسی باشه و یا هرچیزی همه رو به اون زبانی که میخوام ترجمه کنه
با تشکر
من برای ترجمه متن از گوگل ترانسلیت استفاده می کنم یه مشکلی که دارم اینکه وقتی متنی رو برام ترجمه می کنه کلمات و جملات داخل پرانتز و اصطلاحات رو ترجمه نمی کنه مثلا وقتی یه متن همه اش فارسی باشه ولی داخل پرانتزها اصطلاحی نوشته باشه که انگلیسی باشه اونو ترجمه نمی کنه! فقط تنهایی اون قسمتا رو باید ترجمه کنم می خوام کدی در اختیار داشته باشم که فارغ از اینکه متن انگلیسی باشه و یا هرچیزی همه رو به اون زبانی که میخوام ترجمه کنه
با تشکر
متاسفانه ما چنین کدی در اختیار نداریم و نوشتن آن هم فرآیندی زمانبر است و شامل خدمات سایت نمی شود، اما اگر کدی دارید که نیاز به راهنمایی و اصلاح دارد می توانیم در بخش هایی کمکتان کنیم.
آخرین دیدگاه ها

javascript
سلام 🙌 توی جاوا اسکریپت چطور تگ آپشن رو پیش فرض بزاریم مثلا : تگ آپشن _استان محل صدور : همدان -...۱۴۰۲/۰۷/۰۶
Fateme
سلام مطالب عالی و استفاده می کنم دستتان درد نکنه . سوال من این هست چطور میتونم تاریخ تولد را وارد کنم سن شخص رو...۱۴۰۲/۰۷/۰۵
مجتهدزاده
سلام من در لاراول سعی دارم تا با یک لینک رو اجرا کنم تا یک اس ام اس به شماره ای که در...۱۴۰۲/۰۷/۰۳
پـــرتو
سلام جناب خسته نباشید شرمنده مزاحم میشم عه جناب ببخشید من دو سه تا وبلاگ دارم که یکیش یا دوتاشون هک میشن یعنی...۱۴۰۲/۰۷/۰۳
فاطمه سیداحمدی
با سلام و خسته نباشید من میخوام با استفاده از جاوااسکریپت یه کدی داشته باشم که وقتی کاربر چیزی رو از توی سایت من...۱۴۰۲/۰۷/۰۲
رضا جهانیان
درود برشما من تو گوگل که اسم سایت حراجستون را سرچ می کنم اسم دامنه نوشته شده به انگلیسی کدهای زیادی هم استفاده کردم...۱۴۰۲/۰۶/۳۱
سعید
نمای ظاهری من مثل قبل که در اوت لوک میفرستادم در نیو ایمیل نیست یعنی تغییر کرده چطور میتونم برگردم به همون حالت اول خودش...۱۴۰۲/۰۶/۲۷
سینا
با سلام و خسته نباشید من برای ترجمه متن از گوگل ترانسلیت استفاده می کنم یه مشکلی که دارم اینکه وقتی متنی رو برام...۱۴۰۲/۰۶/۲۵
کوروش
سلام خسته نباشید توضیح : سایتی که تگ های select option ها و همه div ها و label ها ( کلاس های...۱۴۰۲/۰۶/۲۴
عدم اجرای فونت فیس در تب منو
سلام برای تب منو فونت فیس برای تب اول کار میکند اما تب های بعدی اعمال نمیشود چکار باید کرد۱۴۰۲/۰۶/۲۲
محبوبه قاسم پور
سلام وقتتون بخیر برای منوهای کشویی سایت، اگر خاصیت overflow:hidden باشد، زیرمنوها نمایش داده نمی شود، از طرفی اگر این خاصیت فعال نباشد...۱۴۰۲/۰۶/۱۸
پـــرتو
سلام فکنم در یادداشت ها ارسال شده بود و تاریخشم یادم نیست ولی من واقعا نمی دونم کامنتش کجاست که برم برش دارم ...۱۴۰۲/۰۶/۱۴
پـــرتو
سلام خسته نباشید ببخشید مزاحم شدم می خواستم بگم که یه کدی داده بودین قبلا برای بلاگفا که آی پی کسایی که بهمون توهین می...۱۴۰۲/۰۶/۱۱
امیرحسین رستمی
سلام مجدد وقت بخیر لطفا لینک زیر را ببینید میخوام تمام متن های فارسی که اینجا انتخاب کردم رو با عبارت با قائده انتخاب...۱۴۰۲/۰۶/۱۱
امیرحسین رستمی
سلام وقت بخیر من این متنو دارم: میخوام فقط متن های فارسی رو انتخاب کنم با preg_match و متن جایگزین براش بزارم قبلا...۱۴۰۲/۰۶/۱۱
امیرحسین رستمی
در رابطه با دوتا سوال قبلی من این کد رو نوشتم شما بررسی کنید ببینید اگه مشکل دیگه ای نداره ، درست داره کار میکنه...۱۴۰۲/۰۶/۰۹
امیرحسین رستمی
سلام وقت بخیر من یک عبارات با قائده ای میخوام که این متن رو : من همچین عبارتی در نظرم هست ولی ...۱۴۰۲/۰۶/۰۹
hossein
سلام مجدد، ممنون از پاسخگویی شما از وردپرس استفاده میکنم و قالب وودمارت، هدر هم با هدر ساز قالب ساخته شده با اینکه...۱۴۰۲/۰۶/۰۹
امیرحسین
سلام وقت بخیر من یک برنامه نوشتم که از ایپی ای گوگل کمک میگیره و متن میدم بهش و ترجمه میکنه : شما فرض...۱۴۰۲/۰۶/۰۹
hossein
سلام وقت شما بخیر باشه ابتدا جا داره از شما تشکر کنم میخوام یک آیکن لینک دار توی هدر سایتم را از دید...۱۴۰۲/۰۶/۰۹
علی
سلام و با تشکر از راهنمایی شما بنده یک وب سرویس ارسال پیامک دارم که از طریق آن برای کابرانم پیامک ارسال می کنم....۱۴۰۲/۰۶/۰۷
مهدی
سلا چطوری میتونم کدام تو مرورگر دقیق نمایش بدم حتی >< تگ هام نمایش داده بشه در html تگ کد را هم معرف نکنید چون...۱۴۰۲/۰۶/۰۴
محمدرضا
سلام و خدا قوت حضور شما بزرگوار. اول یه تشکر و قدردانی از شما دارم که زمان میزارید و جواب همه دوستان رو میدید....۱۴۰۲/۰۶/۰۳
محمدرضا
سلام وقت شما بخیر لطف بفرمائید با switch و default کدی رو بنویسید که: اگه متغیر a یک باشد متغیر b دو...۱۴۰۲/۰۶/۰۱
پـــرتو
سلام بابت جواب به سوالم در مورد بلاگفا ممنون من خودم با پشتیبانی بلاگفا تماس گرفتم گفنن نمیشه اینکار ولی یه سوال دیگه ازتون داشتم...۱۴۰۲/۰۵/۲۸
fatima
سلام. خسته نباشید. ما با responsive هم میتوانیم اسکرول افقی را حذف کنیم؟۱۴۰۲/۰۵/۲۸
عاطفه
ممنون از پاسخگوییتون. اگر ممکنه این سوال رو هم جواب بدید ممنون میشم. معنی این ارور ها و راه حل رفع اونها رو میخواستم بدونم....۱۴۰۲/۰۵/۲۶
عاطفه
سلام، وقت بخیر. من چندتا مشکل سایتم داره که نمیدونم چطور باید برطرفشون کنم. یکی اینکه وقت لینکای شکسته رو چک میکنم برای لینکدین و...۱۴۰۲/۰۵/۲۵
در انتظار بررسی: ۰
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.