نمایش قسمتی از متن و پاراگراف با 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
تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
ارسال پارامتر به URL و دریافت مقادیر با PHP
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
دریافت و نمایش پیج رنک گوگل با PHP
دیدگاه
Vahid
۰۰:۵۴ ۱۳۹۳/۰۶/۲۹
ممنون از پاسخگوییتون.
لینک اصلی سایت اینجاس :
حالا من میخوام همین اطلاعاتی که تو این صفحه بروز میشه رو تو سایت خودم نشون بدم؛
میخوام همین جدول از نرخ ارز از این صفحه استخراج بشه و تو سایت خودم نشونش بدم.
حالا یا جدول یا فقط اعداد، فرقی نداره.
اینو نوشتم که فقط اعداد داخل td بیاد بیرون اما کل صفحه چاپ میشه و هیچ آرایه ای نمیده!
لینک اصلی سایت اینجاس :
http://www.sarafikish.com/Havaalejat/nerkhe-arz-1.htmlهر وقت تو این لینک نرخ ارز بروز میشه تو صفحه اول هم نشون میده.حالا من میخوام همین اطلاعاتی که تو این صفحه بروز میشه رو تو سایت خودم نشون بدم؛
میخوام همین جدول از نرخ ارز از این صفحه استخراج بشه و تو سایت خودم نشونش بدم.
حالا یا جدول یا فقط اعداد، فرقی نداره.
اینو نوشتم که فقط اعداد داخل td بیاد بیرون اما کل صفحه چاپ میشه و هیچ آرایه ای نمیده!
<?php
$url = "http://www.sarafikish.com/Havaalejat/nerkhe-arz-1.html";
echo $str = file_get_contents($url);
$string = $str;
$pattern = '(<td>[0-9]+\,[0-9]+</td>)';
preg_match_all($pattern, $string, $matches);
print_r($matches);
?>منظور از لینک اصلی حالتی است که اگر به سورس صفحه نگاه کنید، خروجی قابل روئیت باشد، در سورس این صفحه خروجی (اعداد مربوط به نرخ ها) قابل روئیت نیست و پس از بارگذاری کدهای اولیه، با استفاده از Ajax و جاوا اسکریپت بارگذاری می شود و در واقع منبع اصلی خروجی جای دیگری است که پیدا کردن آن به سادگی میسر نیست و باید کل کدهای js بررسی شوند.
Vahid
۱۱:۵۳ ۱۳۹۳/۰۶/۲۸
سلام.
میخوام یه قسمت از سایت sarafikish.com رو بردارم ؛ هر کاری میکنم نمیشه؛ اگه امکان هست یه راهنمایی کنید.
این کد رو میخوام تو جوملا بذارم و در سایت خودم استفاده کنم.
سایت صرافی کیش یه قسمتی داره که نرخ ارز بصورت لحظه ای تغییر میکنه؛ یه نوار باریک زیر اسلایدرش.
حالا من میخوام تو سایت خودم همزمان با تغییرات تو این سایت نشون داده بشه.
ممنون میشم کمک کنید
میخوام یه قسمت از سایت sarafikish.com رو بردارم ؛ هر کاری میکنم نمیشه؛ اگه امکان هست یه راهنمایی کنید.
این کد رو میخوام تو جوملا بذارم و در سایت خودم استفاده کنم.
سایت صرافی کیش یه قسمتی داره که نرخ ارز بصورت لحظه ای تغییر میکنه؛ یه نوار باریک زیر اسلایدرش.
حالا من میخوام تو سایت خودم همزمان با تغییرات تو این سایت نشون داده بشه.
ممنون میشم کمک کنید
سلام
محتوایی که به صورت Ajax در صفحه بارگذاری می شوند قابل دریافت مستقیم نیستند (چون در واقع خروجی اولیه سرور نیستند و در مرحله های بعدی در مرورگر بارگذاری می شوند)، باید ببینید لینک مستقیم (بدون Ajax) دریافت اطلاعات در سایت مذکور چیست که البته این یک کار حرفه ای است و نیاز به صرف زمان و بررسی دقیق دارد!
محتوایی که به صورت Ajax در صفحه بارگذاری می شوند قابل دریافت مستقیم نیستند (چون در واقع خروجی اولیه سرور نیستند و در مرحله های بعدی در مرورگر بارگذاری می شوند)، باید ببینید لینک مستقیم (بدون Ajax) دریافت اطلاعات در سایت مذکور چیست که البته این یک کار حرفه ای است و نیاز به صرف زمان و بررسی دقیق دارد!
مجتبی
۱۸:۰۷ ۱۳۹۳/۰۵/۱۰
سلام. با تشکر از سایت بسیار عالیتون . جواب بسیاری از مشکلاتم رو در ساییتتون پیدا کردم. دو تا سوال داشتم :
1- من همین مشکل substr رو دارم و آخر متنم بعد از اینکه مثلا 400 کاراکتر را جدا کرد علامت سوال میذاره . بجای substr چی میشه استفاده کرد
2- تابع strlen نیز برام مشکلاتی داره مثلا میخام این کار رو بکنم اما درست کار نمیکنه :
1- من همین مشکل substr رو دارم و آخر متنم بعد از اینکه مثلا 400 کاراکتر را جدا کرد علامت سوال میذاره . بجای substr چی میشه استفاده کرد
2- تابع strlen نیز برام مشکلاتی داره مثلا میخام این کار رو بکنم اما درست کار نمیکنه :
if(strlen($str)<10 && strlen($str)>70)برای این دو مشکل چیکار کنم. ممنون از لطفتونسلام
برای برطرف شدن مشکل تابع substr با حروف فارسی می توانید از نمونه کد زیر استفاده کنید:
برای برطرف شدن مشکل تابع substr با حروف فارسی می توانید از نمونه کد زیر استفاده کنید:
<?php
$str = 'این یک تست است';
echo mb_substr($str, 0, 5, 'UTF-8');
?>برای برطرف شدن مشکل حروف فارسی در تابع strlen نیز از نمونه کد زیر استفاده کنید:<?php
$str = 'این یک تست است';
echo mb_strlen($str, 'UTF-8');
?>علی
۰۰:۵۶ ۱۳۹۳/۰۴/۲۷
من از articles استفاده کردم
ولی با کلمات فارسی به این شکل در میاد
یعنی اگه تعداد نمایش
یه حرف اخر به این صورت در میاد
راه حل چیه؟
ولی با کلمات فارسی به این شکل در میاد
یعنی اگه تعداد نمایش
echo substr("$string", 0, 5);باشهیه حرف اخر به این صورت در میاد
�منظورتون از رفتاری متفاوت دارد. همین بود؟راه حل چیه؟
برای حروف فارسی باید از روش کلمه استفاده کنید، روش تفکیک به صورت حرف به دلیل دو کاراکتری بودن حروف فارسی ممکن نیست!
سعید
۰۰:۰۷ ۱۳۹۳/۰۱/۲۲
استاد گرامی
وقتی با روش درصدی مقدار دهی می کنم باز همان سرنوشت مقدار دهی پیکسلی دچار می شم یعنی وقتی قبلا اندازه یک دایو 25% تعیین شده چطور باید تبدیل بشه به 33% ؟!
از طرفی وقتی با outo مقدار دهی بشن دایو بر مبنای محتویات داخل دایو اندازه می گیره بنابراین یکی خیلی کوچیک می شه و یکی خیلی بزرگ و نمیشه اونها رو هم اندازه کرد !!
اگر براتون ممکنه راهنمایی بفرمایید
وقتی با روش درصدی مقدار دهی می کنم باز همان سرنوشت مقدار دهی پیکسلی دچار می شم یعنی وقتی قبلا اندازه یک دایو 25% تعیین شده چطور باید تبدیل بشه به 33% ؟!
از طرفی وقتی با outo مقدار دهی بشن دایو بر مبنای محتویات داخل دایو اندازه می گیره بنابراین یکی خیلی کوچیک می شه و یکی خیلی بزرگ و نمیشه اونها رو هم اندازه کرد !!
اگر براتون ممکنه راهنمایی بفرمایید
به تجربه، نمی توانید آنچه که مد نظرتان است (ایجاد سیستم داینامیک برای اندازه بلاک ماژول ها) را به راحتی در برنامه هایی نظیر جوملا پیاده سازی کنید، در عمل هم شاید سایتی نباشد که مشابه کار شما را انجام داده باشد، خروجی جوملا ابتدا در سرور تهیه و سپس به مرورگر ارسال می شود، پس محاسبات شما نیز باید در سمت سرور باشد (که این مستلزم آشنایی با هسته جوملا است)، یک راه حل دیگر که توصیه نمی شود، استفاده از جاوا اسکریپت در سمت کاربر است که می تواند این محاسبات را پس از ارسال خروجی انجام دهد، البته اینجا هم نیاز به نوشتن توابع نسبتا پیچیده برای انجام جمع و تقسیم ها و مقدار دهی نهایی به بلاک ها است که باید وقت بگذارید و آنها را پیاده سازی کنید، ضمن اینکه در این روش با غیر فعال بودن جاوا اسکریپت در مرورگر، تنظیم اندازه بلاک ها به روال عادی برمی گردد.
سعید
۱۹:۲۳ ۱۳۹۳/۰۱/۲۱
با تشکر از راهنمایی شما هر چند دارم تلاش می کنم از راهنمایی شما استفاده کنم اما برای روشن شدن مسئله اون رو بیشتر توضیح میدم شاید راه مناسب تری به نظر شما برسه و برای من کمک مضاعفی بشه:
توی سایتی که بنده طراحی کردم 4 جایگاه با دایو طراحی کردم که محل قرارگیری ماژول های جوملا خواهند بود بعد با یک فایل css دارم براشون طول و عرض مشخص می کنم خوب اینها ممکنه همیشه فعال نباشن یعنی ممکنه من بخوام فقط از دو تا از اونها استفاده کنم در این حالت باید عرض (مثلا) 25px که قبلا هر دایو داشته تبدیل بشه به 50px همینطور تمام حالات دیگه ای که ممکنه پیش بیاد. به نظرم باید به نحوی ماژول های فعال شمرده بشن و طبق اون به دایوها اندازه داده بشه !
توی سایتی که بنده طراحی کردم 4 جایگاه با دایو طراحی کردم که محل قرارگیری ماژول های جوملا خواهند بود بعد با یک فایل css دارم براشون طول و عرض مشخص می کنم خوب اینها ممکنه همیشه فعال نباشن یعنی ممکنه من بخوام فقط از دو تا از اونها استفاده کنم در این حالت باید عرض (مثلا) 25px که قبلا هر دایو داشته تبدیل بشه به 50px همینطور تمام حالات دیگه ای که ممکنه پیش بیاد. به نظرم باید به نحوی ماژول های فعال شمرده بشن و طبق اون به دایوها اندازه داده بشه !
روش انتخابی در عمل کاربرد زیادی ندارد و متداول نیست، این نوع موارد را معمولا با مقادیر درصدی یا به صورت auto در CSS تعریف می کنند.
سعید
۱۵:۲۹ ۱۳۹۳/۰۱/۲۰
با سلام
من دارم دنبال راهی می گردم تا بتونم تعداد ماژول های فعال رو در یک صفحه از سایت جوملایی خودم بشمرم تا بتونم بنا به تعداد اونها براشون اندازه تعریف کنم ممنون می شم تابعی رو معرف کنید که بتونه برام این کار رو انجام بده
اگر برای ماژول مشکلی هست همینکه بتونم تعداد دایو های فعال یک بخش رو بشمرم هم شاید بتونم کاری انجام بدم
پیشاپیش از راهنمایی شما ممنونم
من دارم دنبال راهی می گردم تا بتونم تعداد ماژول های فعال رو در یک صفحه از سایت جوملایی خودم بشمرم تا بتونم بنا به تعداد اونها براشون اندازه تعریف کنم ممنون می شم تابعی رو معرف کنید که بتونه برام این کار رو انجام بده
اگر برای ماژول مشکلی هست همینکه بتونم تعداد دایو های فعال یک بخش رو بشمرم هم شاید بتونم کاری انجام بدم
پیشاپیش از راهنمایی شما ممنونم
سلام
دقیقا متوجه سوالتان نشدیم!، می خواهید در خروجی سایت تعداد تکرار div ها را شمارش کنید؟ اگر منظور این است می توانید از تابع زیر استفاده کنید، مبنای تابع کلاس CSS بلاک ها است:
دقیقا متوجه سوالتان نشدیم!، می خواهید در خروجی سایت تعداد تکرار div ها را شمارش کنید؟ اگر منظور این است می توانید از تابع زیر استفاده کنید، مبنای تابع کلاس CSS بلاک ها است:
<?php
function getElementsByClassName($elements, $className){
$matches = 0;
foreach($elements as $element){
if($element->hasAttribute('class')){
$class = $element->getAttribute('class');
if($class == $className){
$matches++;
}
}
}
return $matches;
}
//فراخوانی
$dom = new DOMDocument();
$html_string = file_get_contents('http://webgoo.ir');
@$dom->loadHTML($html_string);
$length = getElementsByClassName($dom->getElementsByTagName('div'), 'padder-justify');
echo $length;
?>امین
۲۱:۵۲ ۱۳۹۳/۰۱/۱۶
سلام
استاد راهی وجود داره تا اطلاعات رو ازش گرفت؟
ممنون میشم کمکم کنی واسم مهمه
استاد راهی وجود داره تا اطلاعات رو ازش گرفت؟
ممنون میشم کمکم کنی واسم مهمه
سلام
ساده نیست و ممکن است عملی نباشد!
باید سورس کد سایت را به دقت بررسی کنید و ببینید موقع دریافت اطلاعات به چه آدرسی و چه پارامترهایی درخواست ارسال می کند، سپس عین درخواست آن را شبیه سازی کنید (این کار زمانبری است و فقط تا همین حد می توانیم کمکتان کنیم).
ساده نیست و ممکن است عملی نباشد!
باید سورس کد سایت را به دقت بررسی کنید و ببینید موقع دریافت اطلاعات به چه آدرسی و چه پارامترهایی درخواست ارسال می کند، سپس عین درخواست آن را شبیه سازی کنید (این کار زمانبری است و فقط تا همین حد می توانیم کمکتان کنیم).
امین
۱۴:۰۰ ۱۳۹۳/۰۱/۱۶
سلام استاد
قبلاً تو صفحه یک درباره preg_match توضیح داده بودین اما چرا این توضیحات فقط رو بعضی از سایتها اجرا میشه مثلا من میخوام اطلاعات این صفحه مثل تعداد معاملات و درصد خرید حقیقی و حقوقی رو بدست بیاد اما نتونستم . ممنون میشم در مورد سایت زیر یک نمونه کوچیک رو بنویسید.
قبلاً تو صفحه یک درباره preg_match توضیح داده بودین اما چرا این توضیحات فقط رو بعضی از سایتها اجرا میشه مثلا من میخوام اطلاعات این صفحه مثل تعداد معاملات و درصد خرید حقیقی و حقوقی رو بدست بیاد اما نتونستم . ممنون میشم در مورد سایت زیر یک نمونه کوچیک رو بنویسید.
http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=35366681030756042ضمنا با اجرای نمونه کد شما با این پیغام مواجه میشم که هر کاری میکنم برطرف نمیشه:Notice: Undefined offset: 0 in C:\EasyPHP-12.0\www\site\prev0~.php on line 55با تشکر از شما استاد عزیزسلام
اطلاعات این سایت به صورت آژاکس بارگذاری می شود، تابع preg_match قادر به دریافت این نوع صفحات نیست!
خطای دریافتی به دلیل پیدا نشدن مقدار برای الگوی تنظیم شده است.
اطلاعات این سایت به صورت آژاکس بارگذاری می شود، تابع preg_match قادر به دریافت این نوع صفحات نیست!
خطای دریافتی به دلیل پیدا نشدن مقدار برای الگوی تنظیم شده است.
ابوالفضل
۲۱:۵۹ ۱۳۹۲/۱۱/۲۵
سلام کد رو توی وبلاگ زیر گذاشتم جهت بررسی:
http://demowebo.blogfa.comاز کد پی اچ پی زیر استفاده می کنم:<?php
$content = file_get_contents('http://demowebo.blogfa.com/');
$title = preg_match("/<script language=\"javascript\" src=\"http:\/\/www.mysite.com\/abzar.php\?s=([0-9]+)\"><\/script>/ims", $content, $match);
echo $match[1];
?> و خطایی که دریافت می کنم:Notice: Undefined offset: 1 in C:\xampp\htdocs\test.php on line 4خواهش می کنم بررسی کنید در ضمن اگر بخوایم روبروی s به جای عدد یک حروف انگلیسی باشه باید چیکار کنیم نمونه زیر درسته :<?php
$content = file_get_contents('http://demowebo.blogfa.com/');
$title = preg_match("/<script language=\"javascript\" src=\"http:\/\/www.mysite.com\/abzar.php\?s=([0-9a-zA-Z]+)\"><\/script>/ims", $content, $match);
echo $match[1];
?>سلام
کدها اصلاح و تست شدند، اشکال از قرار ندادن علامت \ برای ? بود.
کدها اصلاح و تست شدند، اشکال از قرار ندادن علامت \ برای ? بود.
ابوالفضل
۱۱:۱۱ ۱۳۹۲/۱۱/۲۵
سلام ممنون بابت پاسخ به سوالاتم
متاسفانه کد عمل نمیکنه و خطای زیر رو میده :
خیلی ممنون
متاسفانه کد عمل نمیکنه و خطای زیر رو میده :
Notice: Undefined offset: 1 in C:\xampp\htdocs\site.com\site\validate.php on line 82در خط 82 متغیر $match[1]وجود دارد که مقدار نمیگیره و باعث این خطا میشه از آنجا که من چیزی از عبارات با قائده سر در نمیارم و واسم یه کمی پیچیده است ازتون می خوام در این زمینه بیشتر کمکم کنید خیلی ممنون
سلام
چون عبارت مورد نظر در صفحه درخواستی وجود ندارد خروجی هم نخواهیم داشت، برای رفع خطای Notice کافی است از علامت @ در مقابل متغیر استفاده کنید.
اگر مطمئن هستید که عبارت در صفحه دریافتی وجود دارد و با این حال کد خروجی نمی دهد، لطفا یک نمونه آدرس درج کنید تا بررسی گردد.
چون عبارت مورد نظر در صفحه درخواستی وجود ندارد خروجی هم نخواهیم داشت، برای رفع خطای Notice کافی است از علامت @ در مقابل متغیر استفاده کنید.
اگر مطمئن هستید که عبارت در صفحه دریافتی وجود دارد و با این حال کد خروجی نمی دهد، لطفا یک نمونه آدرس درج کنید تا بررسی گردد.
ابوالفضل
۰۱:۰۰ ۱۳۹۲/۱۱/۲۵
با سلام من در سایتم می خواهم به کاربرانی که کد منو در سایتشون قرار داده اند امکانی بدهم و از همین کد شما استفاده کردم:
1. آیا استفاده از این روش فشاری روی سرور میاره یا نه؟
2. نمیشه سرعت پاسخگوییش رو بالاتر برد
3. در صورتی که دسترسی به اون صفحه (وبلاگ) امکان پذیر نبود آیا میشه مقداری را دریافت کرد که مشخص بشه اون صفحه در دسترس نبوده
ممنون از سایت خوبتون
<?php
$content = file_get_contents('http://bloguser.blogfa.com');
$title = preg_match("/<div class=\"abzar\"[^>]*>(.*?)<\\/div>/ims", $content, $match);
echo $match[1];
?>کد خیلی عالی کار می کنه اما حالا می خوام اون div را دیگر در کدی که به کاربران می دهم قرار ندهم می خوام این کد چک کنه آیا کدی مانند زیر قرار دارد در وبلاگ طرف یا نه:<script language="javascript" src="http://www.mysite.com/abzar.php?s=2"></script>البته عبارت مقابل S برای هر کاربری مختلف هست و من میخوام عبارت مقابل همین s هم دریافت کنم تا واقعا مطمئن بشم کاربر از کد خودش توی وبلاگ خودش استفاده می کنه بی نهایت ممنون می شم کمکم کنید در ضمن چند سوال دارم 1. آیا استفاده از این روش فشاری روی سرور میاره یا نه؟
2. نمیشه سرعت پاسخگوییش رو بالاتر برد
3. در صورتی که دسترسی به اون صفحه (وبلاگ) امکان پذیر نبود آیا میشه مقداری را دریافت کرد که مشخص بشه اون صفحه در دسترس نبوده
ممنون از سایت خوبتون
سلام
برای بررسی وجود عبارت مورد نظر از نمونه زیر استفاده کنید (تست نشده):
در مورد دریافت خطا، این تابع یا اجرا می شود یا نه، یعنی اگر FALSE برگردانده شود یعنی اشکالی وجود دارد (که الزاما دلیل بر در دسترس نبودن وبلاگ نیست)، برای دریافت HTTP status code باید از توابع دیگر مانند curl یا
افزایش سرعت این کد بستگی به سرعت بارگذاری صفحه درخواستی دارد، در واقع این کد به اندازه کافی سریع است، اما چون بخشی از کار به سایت هدف ارتباط دارد (یعنی سایت درخواستی باید صفحه را خروجی دهد)، به همین دلیل بسته به عملکرد سایت مقصد ممکن است نتیجه سریع تر یا دیرتر نمایش داده شود.
برای بررسی وجود عبارت مورد نظر از نمونه زیر استفاده کنید (تست نشده):
<?php
$content = file_get_contents('http://myblog.blogfa.com/');
$title = preg_match("/<script language=\"javascript\" src=\"http:\/\/www.mysite.com\/abzar.php?s=([0-9]+)\"><\/script>/ims", $content, $match);
echo $match[1];
?>در مورد سوالات، قاعدتا هر فعل و انفعالی بخشی از توان سرور را مصرف می کند که این به تعداد کاربران و قدرت سرور نیز بستگی دارد، اما در کل این کد چندان پر مصرف نیست! چون کار خاصی که منابع سرور را درگیر کند انجام نمی شود.در مورد دریافت خطا، این تابع یا اجرا می شود یا نه، یعنی اگر FALSE برگردانده شود یعنی اشکالی وجود دارد (که الزاما دلیل بر در دسترس نبودن وبلاگ نیست)، برای دریافت HTTP status code باید از توابع دیگر مانند curl یا
$http_response_headerاستفاده کنید.افزایش سرعت این کد بستگی به سرعت بارگذاری صفحه درخواستی دارد، در واقع این کد به اندازه کافی سریع است، اما چون بخشی از کار به سایت هدف ارتباط دارد (یعنی سایت درخواستی باید صفحه را خروجی دهد)، به همین دلیل بسته به عملکرد سایت مقصد ممکن است نتیجه سریع تر یا دیرتر نمایش داده شود.
۰۲:۰۸ ۱۳۹۲/۰۹/۳۰
سلام
می خواستم اگه میشه راهنمایی کنید متن زیر که تو دیتابیس ذخیره شده رو چطوری تفکیک کنم و خروجی به صورت مرتب نمایش بدم ؟
متن ذخیره شده :
می خواستم اگه میشه راهنمایی کنید متن زیر که تو دیتابیس ذخیره شده رو چطوری تفکیک کنم و خروجی به صورت مرتب نمایش بدم ؟
متن ذخیره شده :
<p align="right"><img src="sample.jpg" alt="" />مطلب نمونه جهت تست</p><p>یک مطلب تستی</p>شکلی که من می خوام نمایش بده :<div id="image"><img src="sample.jpg" alt="" /></div>
<div id="text">مطلب نمونه جهت تست<p>یک مطلب تستی</p></div>ممنون میشم راهنمایی کنید. با تشکرسلام
نمونه کد زیر این کار را انجام می دهد:
نمونه کد زیر این کار را انجام می دهد:
<?php
function makeNew($str){
$str = preg_replace('/(<p align="right">)(<img src=".*" alt="" \/>)(.*)(<\/p><p>)(.*)(<\/p>)/i', '<div id="image">$2</div>'."\n".'<div id="text">$3<p>$5</p></div>'."\n", $str);
return $str;
}
$old = '<p align="right"><img src="sample.jpg" alt="" />مطلب نمونه جهت تست</p><p>یک مطلب تستی</p>';
$new = makeNew($old);
echo $new;
?>نکته: بخش مربوط به دیتابیس را باید با نوشتن یک پرس و جو برای فراخوانی و یک پرس و جو برای آپدیت اطلاعات، خودتان بنویسید، در ضمن ابتدا پس از گرفتن پشتیبان از دیتابیس، در لوکال هاست کد را کامل تست کنید تا از بروز مشکلات ناخواسته جلوگیری شود.ابوالفضل
۱۰:۴۳ ۱۳۹۲/۰۷/۲۴
سلام من میخوام قسمتی از سایتم برای آی پی های ایرانی قابل رویت نباشه و نمایش داده نشود لطفا راهنمایی بفرمایید
مرسی از سایت خوبتون
مرسی از سایت خوبتون
سلام
انجام این کار خیلی ساده نیست، باید یک بانک IP داشته باشید که بتوانید نام کشور کاربر را از طریق ان بدست آورید، سپس متناسب با سیستم سایت، کدی بنویسید که اگر IP به کاربر ایرانی تعلق داشت، قسمت های مورد نظر را نمایش ندهد، برای دریافت بانک IP می توانید به آدرس زیر مراجعه کنید:
انجام این کار خیلی ساده نیست، باید یک بانک IP داشته باشید که بتوانید نام کشور کاربر را از طریق ان بدست آورید، سپس متناسب با سیستم سایت، کدی بنویسید که اگر IP به کاربر ایرانی تعلق داشت، قسمت های مورد نظر را نمایش ندهد، برای دریافت بانک IP می توانید به آدرس زیر مراجعه کنید:
http://www.phptutorial.info/iptocountry/the_script.htmlیاhttp://chir.ag/projects/geoiploc۱۵:۴۴ ۱۳۹۲/۰۶/۱۸
متشکرم اما در مورد پترن چی؟
در مورد الگو ها چطور باید عمل کرد؟
در مورد الگو ها چطور باید عمل کرد؟
الگوها همان عبارات با قاعده هستند که باید قوانینشان را یاد بگیرید (آموزش های لازم در سایت و در وب وجود دارد).
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.