یکشنبه ۲۷ خرداد ۱۴۰۳

Sunday, June 16, 2024 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 مطالب بیشتر:
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
ارسال ایمیل با PHP و کلاس PHPMailer
تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
دیدگاه
more ۱۱۹ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
بهاره هوشمندی
۰۷:۰۷ ۱۴۰۲/۰۹/۰۲
استاد ببخشید
وقتی یه متن طولانی رو باهاش چک می کنم اگه تگ span و b داشته باشه چون تگ رو نمی بنده تا آخر اون متن رو تغییر میده، یعنی bold و یا استایل span رو می گیره. مثلا یه جایی رو من bold کردم توی متن ویرایش شده بعد واسه مقایسه اونجا رو نشون میده که b بهش اضافه شده و bold شده ولی خب از اونجا تا آخر متن چون تگ <b> براش باز شده همه رو با فونت bold نشون میده، و اگه span هم داشته باشه همین طوره یعنی استایل ها رو به خودش می گیره چون تگ باز میشه و بسته نمی شه تا آخر متن من می خوام فقط علایم نگارشی و ویرایشی رو ببینم مثلا یه جایی یه ویرگول و یا خط فاصله و یا نقطه و یا... اضافه شده باشه ببینم و اگه کلمه ای حذف و اضافه شده باشه اونم ببینم اگه جایی رنگی شده فقط رنگش رو ببینم که تغییر داده شده این کد واسه متن ساده که این چیزهایی که گفتم رو نداشته باشه خیلی عالی کار می کنه ولی واسه این تگ هایی که گفتم استایل اون تگ هارو به خود می گیره
با تشکر بسیار فراوان و شرمنده :(
همان طور که گفتیم این الگوریتم به صورت آماده در وب در دسترس است و در شرایط متفاوت و برای حالت های کاربردی تست نشده، اما طبق بررسی ما و تغییراتی که اعمال کردیم در تگ های تست شده مشکلی نداشته هرچند با متن های طولانی فرآیند اجرای کدها زمانبر می شود، در هر صورت برای بررسی بیشتر لطفا یک یا چند نمونه سورس HTML به همراه خروجی مورد انتظار را به آدرس ایمیل سایت (موجود در بخش تماس) ارسال و نتیجه را از طریق ایمیل پیگیر باشید، فرآیند بررسی و رفع ایرادات یا نوشتن الگوریتم جدید می تواند بین چند روز تا هفته زمانبر باشد.
بهاره هوشمندی
۰۹:۳۸ ۱۴۰۲/۰۹/۱۰
سلام استاد
خسته نباشید
ببخشید باز مزاحم شدم اگه من بخوام از تگ strip_tags استفاده کنم و استثنا قائل بشم استایل های اون تگ هارو هم می گیره من میخوام اون استثناها باشه ولی استایل هارو نگیره و متن خروجی ساده باشه
strip_tags($contant,'<h1><h2><b><br><p>');
الان اینارو استثنا کردم ولی متن اصلی واسه این تگ ها هر استایلی داشته باشه برای این کد هم لحاظ می شه! من میخوام خروجی همه ی اینا بدون استایل باشه
با تشکر فراوان
لطفا یک نمونه سورس متن و آخرین تغییراتی که اعمال کرده اید را به صورت پیوست به آدرس ایمیل ما ارسال کنید تا بررسی و نتیجه را خدمتتان اعلام کنیم.
سجاد مهدوی
۰۲:۱۳ ۱۴۰۲/۱۰/۱۰
با سلام
ببخشید می تونید توی سایت نوبیتکس ثبت نام کنید و با api هایی که دادن یه کد بنویسید که اعلام موجودی رو بهمون بده؟ خیلی بهش نیاز دارم ممنون میشم اینکارو واسم انجام بدید
با تشکر
متاسفانه انجام سفارش برنامه نویسی در حال حاضر پذیرفته نمی شود.
بهاره هوشمندی
۲۰:۲۶ ۱۴۰۲/۱۰/۱۷
با سلام و خسته نباشید استاد
لود کردن کوئری های سایت من واسه یه صفحه زیاده و ۱۰ تا ۱۵ ثانیه طول میکشه که همه کوئری ها لود بشه بعد کاربران فکر میکنن سایت خراب شده ولی بعد لود کردن همه چی بارگزاری میشه سیستم من yii است میخوام توی کنترلر یه کدی بذارم یا راه حلی داشته باشه که وقتی کاربر صفحه رو سفید می بینه پیام لطفا منتظر بمانید رو ببینه و منتظر باشه یا مثل سایت شما وقتی سایت لود میشه درصد لود شدن رو به کاربر نشون بره که فکر نکنه سایت خرابه
با تشکر
برای نمایش پیام صفحه در حال بارگذاری لطفا آموزش این سایت را بررسی کنید:
https://www.geeksforgeeks.org/how-to-show-page-loading-div-until-the-page-has-finished-loading/ 
بهاره هوشمندی
۱۹:۲۶ ۱۴۰۲/۱۰/۱۸
با سلام
لینک رو نگاه کردم خوب بود ولی من میخوام برای کاربر بنویسم که تا ۱۰ ثانیه صبر کنه که کاربر صفحه رو لود نکنه چون سفید می بینه!
این فقط یه دایره چرخ میزنه و میره
آموزش این روش در سایت به روز شد، می توانید با درج عبارت "نمایش پیام در حال بارگذاری با جاوا اسکریپت" در قسمت جستجو به این مطلب دسترسی پیدا کنید.
بهاره هوشمندی
۱۶:۲۶ ۱۴۰۲/۱۰/۲۱
با سلام و خسته نباشید
وقتی میخوام با گوگل ترانسلیت متنی رو با php ترجمه کنم عکس ها رو خراب می کنه چون توی عکس ها هم متن انگلیسی هست و اونا رو هم قاتی می کنه چیکار کنم وقتی با استفاده از اسکریپت یه متنی رو ترجمه می کنه به لینک عکسها و یا لینک های داخل href کاری نداشته باشه؟ لینک عکسها و لینک ها رو نمی خوام کاری بهشون داشته باشه چون خراب میشن
با تشکر
تا آنجایی که اطلاع داریم ترجمه گوگل پارامتری تحت عنوان format دارد که می توانید به صورت plain-text یا در حالت مد نظر شما html آن را تنظیم کنید، البته راهنمای روشنی برای نحوه استفاده از این تنظیمات در سایت توسعه دهنده گان گوگل وجود ندارد اما احتمالا در تابع curl یا در آدرس URL می توانید به صورت پارامتر متد GET آن را تنظیم کنید، در صورت نیاز به راهنمایی بیشتر لطفا کد قابل تست را به آدرس ایمیل ما (موجود در بخش تماس) ارسال و نتیجه را از همان طریق پیگیری کنید.
بهاره هوشمندی
۰۳:۲۴ ۱۴۰۲/۱۰/۲۲
با سلام و خسته نباشید
واسه ترجمه از این تابع استفاده میکنم
<?php
class GoogleTranslate {
public static function translate($from, $target, $text): string {
$response = self::requestTranslation($from, $target, $text);
return self::getSentencesFromJSON($response);
}

protected static function requestTranslation($source, $target, $text): string {
$url = "https://translate.google.com/translate_a/single?client=at&dt=t&dt=ld&dt=qca&dt=rm&dt=bd&dj=1&hl=es-ES&ie=UTF-8&oe=UTF-8&inputm=2&otf=2&iid=1dd3b944-fa62-4b55-b330-74909a99969e";
$fields_string = http_build_query([
'sl' => $source,
'tl' => $target,
'q' => $text
]);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'AndroidTranslate/5.3.0.RC02.130475354-53000263 5.1 phone TRANSLATE_OPM5_TEST_1');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Length: ' . strlen($fields_string))
);

$result = curl_exec($ch);
curl_close($ch);

return $result;
}

protected static function getSentencesFromJSON($json): string {
$sentencesArray = json_decode($json, true);
$sentences = "";
foreach($sentencesArray["sentences"] as $s) {
if(!isset($s['trans']))
continue;
$sentences .= $s["trans"];
}
return $sentences;
}
}

$from = 'en';
$target = 'fa';
$text = 'this is <img src="http://example.com/this/is/a/test/image.png" alt="something"> a test text!';
$call = new GoogleTranslate();
echo $call::translate($from, $target, $text);
?>
کد بالا با افزودن چند خط پایانی تست شد، خروجی به صورت زیر بود و مشکلی نداشت:
این <img src="http://example.com/this/is/a/test/image.png" alt="something"> یک متن آزمایشی است!
فرهادی
۰۸:۰۴ ۱۴۰۲/۱۲/۲۱
با سلام
من اومدم توی دیتابیس
$post
رو دقیقا به این صورت ذخیره کردم
/<div class=\"left\"[^>]*>(.*?)<\\/div>/ims;
بعد اومدم توی یه صفحه اینکارو کردم
$code = htmlentities("'".$post."'");
و
$page = file_get_contents('https://gama.ir/learnfiles/detail/65610');
و بعد
$s = preg_match($code, $page , $match);
echo $match[1];
هیچی رو نمیاره! هرکاری کردم هیچی اتفاقی نمی افته درحالیکه اینطوری کار می کنه
<?php
$page = Rh::file_get_contents('https://gama.ir/learnfiles/detail/65610');
$_code = '/<div class=\"left\"[^>]*>(.*?)<\\/div>/ims';
$s = preg_match($_code, $page , $match);
echo $match[1];
?>
من می خوام به شیوه اول کار کنه چون الگوها رو میخوام از توی پنل مدیریت توی دیتابیس ذخیره کنم و بعد فراخوانی هارو انجام بدم ولی واسه من کار نمی کنه!
ممنون میشم راهنمایی کنید
با تشکر
چند نکته در نمونه کدهای شما دیده می شود که احتمالا اشتباه است.
- تابع htmlentities کاراکترهای قابل اجرا و خاص HTML مانند <> را به معادل بی اثر آنها تبدیل می کند به فرض
<b>bold</b>
به حالت زیر تغییر می کند:
&lt;b&gt;bold&lt;/b&gt;
در صورتی که الگوی باقاعده شما مبتنی بر وجود این تگ ها است و اگر تبدیل شوند الگو تطابق نمی کند.
- نکته دیگر این است که ببینید در برنامه phpMyAdmin متن الگو دقیقا به چه شکلی در دیتابیس ذخیره شده است، اگر کاراکترهای <> به معادل آنها تبدیل شده باشند باید ابتدا از تابع html_entity_decode استفاده و آنها را به شکل اولیه برگردانید.
- ظاهرا الگو هم ایرادی دارد چون این قسمت
class=\"left\"[^>]*>
یعنی بعد از عبارت left کاراکتر " قرار بگیرد و بعد از این کاراکتر هر عبارت اختیاری غیر از < و در نهایت < باشد، در صورتی که بخش آخر اضافه به نظر می رسد و با عبارت " الگو بسته می شود، احتمالا الگو با توجه به محتوای هدف باید به یکی از حالت های زیر باشد:
'/<div class=\"left\">(.*?)<\\/div>/ims';

'/<div class=\"left[^>]*\">(.*?)<\\/div>/ims';
اطلاعات بیشتر در خصوص توابع تبدیل HTML:
https://www.php.net/manual/en/function.html-entity-decode.php

https://www.php.net/manual/en/function.htmlentities.php
فرهادی
۱۱:۰۸ ۱۴۰۲/۱۲/۲۱
با تشکر از شما
جدول دیتابیس رو نگاه کردم و دقیقا به شیوه ای که نوشتن ذخیره شده و با htmlentities هم الگویی که من میخوام توی print_r نشون میده الگو هم وقتی بصورت بصورت عادی همین رو وارد می کنم فراخوانی رو انجام میده ولی وقتی از دیتابیس الگو رو میارم هیچی لود نمی کنه! از این الگو جاهای دیگه توی کدهای php استفاده کردم و مشکلی نداشته فقط وقتی از دیتابیس استفاده می کنم خروجی که از دیتابیس بهم میده نمی تونه الگو رو تشخیص بده و صفر رو بر می گردونه! در حالیکه وقتی جفت کدهای الگو رو وقتی پرینت می کنم یکی هستن دقیقا هیچی فرقی با هم ندارن فقط وقتی توی preg_match جا میدم اونی که توی دیتابیس هست کار نمی کنه! از دیشب درگیرش هستم و به نتیجه ای نرسیدم!
برای سایت شما هم همین کارو کردم جفت الگوها یکی پرینت میشن ولی اونی که توی دیتابیس هست هیچی رو بر نمی گردونه! من لازم دارم بدونه اینکه برم سراغ کدهای php الگوها رو از توی پنل مدیریت وارد دیتابیس کنم و هی لازم نباشه به کدهای php اضافه کنم
فرهادی
۱۲:۵۸ ۱۴۰۲/۱۲/۲۱
ببخشید می تونید با سایت خودتون یه الگو رو چک کنید؟ با روش اول و دوم چک کنید وقتی الگو توی دیتابیس باشه مطلقا هیچی رو بر نمی گردونه! خروجی هم که از الگوی دیتابیس می گیرم هیچ مشکلی نداره و درسته
پیشنهاد می کنیم در یک دیتابیس و جدول فرضی اطلاعات را ذخیره و تست کنید، اگر مشکل پابرجا بود همان دیتابیس و جدول فرضی را در phpMyAdmin خروجی بگیرید و به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید تا دقیقا منطبق بر اطلاعاتی که شما با آن کار می کنید ما بتوانیم تست را انجام دهیم.
فرهادی
۱۸:۵۰ ۱۴۰۳/۰۱/۰۲
با سلام و درود
سال نو رو بهتون تبریک میگم یه سوال من میخوام لینکهای داخل صفحه sitemap.xml سایتها رو دربیارم کدش رو هم نوشتم الان واسه خیلی از سایتها کار می کنه و وقتی لینکها اونجا بصورت
<loc></loc>
هستن دیدید بعضی از سایتها صفحه سایت مپ اونا یه خرده استایل داره ولی وقتی میرم روی سورس اون صفحه اونجا هم لینکها داخل همین تگی هستن که نوشتم
این دو صفحه رو نگاه کنید:
حذف شد
اینجا صفحه بصورت xml است و لینکها داخل تگی که گفتم هستن پس واسه درآوردن لینکها مشکلی نیست حالا این صفحه و نگاه کنید
حذف شد
اینجا صفحه یه قالب داره ولی وقتی سورس صفحه رو نگاه می کنیم بصورت لینک اول هست کدهای من لینکهای لینک اول رو در میاره ولی واسه لینک دوم عکس العمل نداره می تونید راهنمایی کنید
با تشکر
<?php
$data = file_get_contents('sitemap.xml');
if( strpos($data, "sitemapindex") !== false) {
$s = preg_match('/<sitemapindex(.*?)<\\/sitemapindex>/ims', $data , $match);
} else {
$s = preg_match('/<urlset(.*?)<\\/urlset>/ims', $data , $match);
}

$match[1] =str_replace('sitemap','url',$match[1]);

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

foreach ( $d as $k=>$u ) {
if( strpos($u, "<loc") !== false) {
$u = preg_replace('/.*">/sm',"",$u);
$u = preg_replace("/<lastmod>(.*?)<\\/lastmod>/sm","",$u);
$u = preg_replace("/<changefreq>(.*?)<\\/changefreq>/sm","",$u);
$u = preg_replace("/<priority>(.*?)<\\/priority>/sm","",$u);
$u = preg_replace("/\".*/","",$u);
echo $u."<br>";}
}
?>
ضمن تبریک متقابل سال جدید، حالت دوم به صورت sitemapindex است که در الگوی شما تعریف نشده، کدهای بالا برای سازگاری با هر دو حالت ویرایش شدند.
فرهادی
۰۸:۳۱ ۱۴۰۳/۰۱/۰۶
با تشکر از شما
یه سوال دیگه هم دارم توی تعدادی از سایتهای فروشگاهی صفحات سایت مپ به جای لینک صفحات حاوی لینکهایی هستند که پسوند gz دارند. مثل لینک زیر
حذف شد
اینها چی هستند و چطوری میشه لینکهای داخل اینارو استخراج کرد!
با تشکر
فرمت gz مخفف و به معنی GZip Compression یا فایل های فشرده است، برای استخراج اطلاعات این فایل ها در حالت تکی می توانید از یکی از روش های زیر استفاده کنید:
$xml_uncompressed = gzdecode(file_get_contents($url));

$xml_uncompressed = file_get_contents("compress.zlib://{$url}");

$xml_object = simplexml_load_file("compress.zlib://{$url}");
اما در حالت کلی و جایی که لینک ها در یک فایل XML قرار دارند این کدها باید با دستورات دیگری ترکیب شوند تا آدرس های URL داخل سایت مپ اصلی را مورد به مورد تجزیه کنند، به عبارتی نیاز به کدنویسی اختصاصی زمانبر است.
فرهادی
۱۶:۴۴ ۱۴۰۳/۰۱/۰۹
با تشکر از شما
یه مشکل دیگه برام پیش اومده واسه این کد
<?php
$string = '<p class="price"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">&#x062A;&#x0648;&#x0645;&#x0627;&#x0646;</span>&nbsp;15.000</bdi></span></p>';
$data = preg_match('/<p class=\"price\"[^>]*>(.*?)<\\/p>/ims', $string , $match);
echo $match[1];
?>
وقتی echo می گیرم تومان باهاش میاد وقتی میخوام فقط عدد echo گرفته بشه همه ی عددهای این رشته باهاش نشون داده میشه! من میخوام فقط 15000 نشون داده بشه و هیچ چیز دیگه ای توش نباشه!
با تشکر
می توانید الگو را به صورت زیر ویرایش کنید:
$data = preg_match('/<span class=\"woocommerce-Price-currencySymbol[^>]*\">.*<\/span>(.*?)<\/bdi><\/span><\/p>/ims', $string , $match);
echo str_replace('&nbsp;', '', $match[1]);
فرهادی
۰۳:۴۵ ۱۴۰۳/۰۱/۱۰
سلام
ببخشید یه مشکل دارم این صفحه رو نگاه کنید
حذف شد
من میخوام محتوای توضیحات این مطلب رو دربیارم ولی چون
<div class="content">
چند بار توی سورس تکرار شده نمی تونم الگوی توضیحاتش رو استخراج کنم
ممنون میشم کمک کنید
با تشکر
لطفا ضمن مشخص کردن دقیق قسمت مد نظر از خروجی سایت، مشکل را با ایمیل ما مطرح کنید، فقط در صورتی که نوشتن الگو زمانبر نباشد انجام خواهد شد.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
8 × 9
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
پرتو
سلام خوبید؟ خسته نباشید ببخشید مزاحم میشم ممنون از جوابتون راستش بعضی وقتا از بس سوالاتم زیاده روم نمیشه ازتون بپرسم مثل امشب که چیکار...
۱۴۰۳/۰۳/۱۳

پرتو
سلام خوبین؟ خسته نباشید یه سوال من منوی سمت راست قالبم نوشته هاش چسبیده به بردر باید چیکار کنم که درست شه؟ یعنی منظورم اینکه...
۱۴۰۳/۰۳/۰۹

پرتو
سلام خوبید؟ بلاکفا باز دچار مشکل شده یا فقط برای من دچار مشکل شده؟ منظورم اینکه خیلی دیر باز میشه و فقط برای فایرفاکس هم...
۱۴۰۳/۰۳/۰۱

سعیدی
سلام می تونید اینو اصلاح کنید؟ چون من با توضیحات شما یاد نگرفتم خیلی ممنون اگه یکبار اصلاح کنید واسه بعد یاد...
۱۴۰۳/۰۲/۲۲

سعیدی
دست شما درد نکنه وقتی اینطوری تغییر میدم و به class می نویسم کار نمی کنه و ارور میده
۱۴۰۳/۰۲/۲۱

سعیدی
دست شما درد نکنه خیلی خوب بود این یکی رو چطوری فراخوانی کنم؟ این واسه مناسبت هاست خیلی ممنون
۱۴۰۳/۰۲/۱۹

سعیدی
با سلام آیا می شه این تابع رو بصورت class نوشت؟ میخوام وقتی کد ملی میدم با این تابع فراخوانی بشه و شهر...
۱۴۰۳/۰۲/۱۹

پرتو
مگه شما دارین اموزشش رو؟ آدرسش رو میزارید؟ یا اگر سایتی رو میشناسید که آموزش داده باشه معرفی کنید ممنون میشم من خیلی گشتم توی...
۱۴۰۳/۰۲/۱۸

پــرتو
سلام خوبید ؟ خسته نباشید گوشی پدرم شیاومی هست ایمیلمو ثبت کردم داخلش بعد می خواستم حذفش کنم نمیشد می گفت همه داده های توی...
۱۴۰۳/۰۲/۱۶

vip
خیلی ممنونم از شما خیلی عالی شد میشه مثل تبلیغ بلاگفا باشه یعنی زیر صفحه نمایش داده بشه و صفحه رو سیاه نکنه که تا...
۱۴۰۳/۰۲/۰۵

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

پـــرتو
سلام خسته نباشید شرمنده مزاحم میشم یه سوال داشتم می خواستم بپرسم که چرا بلاگفا باز نمیشه برام؟ کلا هر وبلاگی که مربوط به بلاگفا...
۱۴۰۳/۰۲/۰۲
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.