نمایش قسمتی از متن و پاراگراف با 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
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
ارسال پارامتر به URL و دریافت مقادیر با PHP
ارسال ایمیل با PHP و کلاس PHPMailer
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
دیدگاه
سینا
۱۲:۲۵ ۱۴۰۰/۱۲/۱۹
با سلام و خسته نباشید
ببخشید میشه از تابع
چون من هرچی می گردم چیزی پیدا نمی کنم! آیا اصلا آرایه برای این تابع میشه استفاده کرد یا نه؟
با تشکر
ببخشید میشه از تابع
preg_match(array) استفاده کرد؟چون من هرچی می گردم چیزی پیدا نمی کنم! آیا اصلا آرایه برای این تابع میشه استفاده کرد یا نه؟
با تشکر
تابع preg_match فقط رشته متنی یا String را به عنوان الگو (Pattern) قبول می کند، می توانید از این تابع در حلقه ها استفاده کنید.
https://www.php.net/manual/en/function.preg-match.php۲۳:۱۶ ۱۴۰۰/۱۰/۲۱
سلام استاد ضمن تشکر از آموزش خوب شما
عرض شود بنده دارم یک ربات چت ساده میسازم که در بانک اطلاعات خود دو ستون پرسش و پاسخ دارد در حال حاضر کدی که استفاده میکنم به شکل فیلتر کردن ستون سؤالات است یعنی حتی اگر یک کلمه از ستون پرسش در کادر جستجو وجود داشته باشد اولین فیلد پاسخ نمایش داده میشود اما میخواهم این کد جستجو به شکلی باشد که نزدیکترین پاسخ را بازگردانی کند به شکل مثال:
فیلد سئوال که شامل یک جمله است به سه قسمت تقسیم شود و از ابتدا، وسط و انتهای آن سه کلمه جدا شود و در دیتابیس اولین جمله که دو کلمه از سه کلمه جدا شده را داشته باشد بازگردانی کند
عرض شود بنده دارم یک ربات چت ساده میسازم که در بانک اطلاعات خود دو ستون پرسش و پاسخ دارد در حال حاضر کدی که استفاده میکنم به شکل فیلتر کردن ستون سؤالات است یعنی حتی اگر یک کلمه از ستون پرسش در کادر جستجو وجود داشته باشد اولین فیلد پاسخ نمایش داده میشود اما میخواهم این کد جستجو به شکلی باشد که نزدیکترین پاسخ را بازگردانی کند به شکل مثال:
فیلد سئوال که شامل یک جمله است به سه قسمت تقسیم شود و از ابتدا، وسط و انتهای آن سه کلمه جدا شود و در دیتابیس اولین جمله که دو کلمه از سه کلمه جدا شده را داشته باشد بازگردانی کند
برای هدف مد نظرتان (هوش مصنوعی) باید الگوریتم نسبتا پیچیده و چند مرحله ای بنویسیم، حالت های زیادی هم باید پیش بینی شود و متناسب با هر کدام قدرت مقایسه و تصمیم گیری به برنامه بدهیم به فرض اگر سوال تنها دو کلمه باشد، یا اگر چهار کلمه بود چطور به سه قسمت تقسیم شود و... در هر صورت در نگاه اجمالی می توانیم سوال را به شکل نمونه زیر به سه آرایه تقسیم کنیم:
<?php
$str = "this is a test text for php array split into 3 part provided by Webgoo.ir!";
$array = explode(' ', $str);
$chunked = array_chunk($array, (ceil(count($array)/3)));
print_r($chunked);
?>به این صورت می توانیم به کلمات در هر قسمت از آرایه های زیرمجموعه دسترسی پیدا کنیم:echo $chunked[0][0] . '<br>';
echo $chunked[1][0] . '<br>';
echo $chunked[2][0] . '<br>';در نهایت هم برای استخراج مقادیر از دیتابیس به نظر باید از عبارات باقاعده (تابع REGEXP) در MySQL استفاده کنیم، به فرض:SELECT col FROM tbl WHERE col REGEXP $chunked[0][0] AND col REGEXP $chunked[1][0] AND col REGEXP $chunked[2][0];البته این کد صرفا جهت راهنمایی بیشتر است و در عمل باید اصول ایمنی پایگاه داده مانند Bind و Prepare را رعایت کنیم و پرس و جو هم باید مطابق با عنوان ستون ها باشد همچنین باید حالت های متفاوتی در نظر گرفته شود.m.b
۲۳:۱۵ ۱۴۰۰/۰۷/۰۲
سلام
واقعا جای تشکر و قدردانی داره از این همه زمان گذاشتن و جواب عزیزان را دادن . یک سوال داشتم از خدمتتان . من چند تا دایو دارم که میخوام اطلاعات قسمتی از متن را داخل آن فراخوانی کنم با تعداد مشخصی کلمه . نمونه سورس من به این صورت می باشد. امکانش هست در ادامه چه کدهایی را بنویسم تا از جدول newposts و ستون description بیاد و مثلا 200 کلمه فارسی که در داخل دیتابیس ذخیره شده را فراخوانی کنه.
واقعا جای تشکر و قدردانی داره از این همه زمان گذاشتن و جواب عزیزان را دادن . یک سوال داشتم از خدمتتان . من چند تا دایو دارم که میخوام اطلاعات قسمتی از متن را داخل آن فراخوانی کنم با تعداد مشخصی کلمه . نمونه سورس من به این صورت می باشد. امکانش هست در ادامه چه کدهایی را بنویسم تا از جدول newposts و ستون description بیاد و مثلا 200 کلمه فارسی که در داخل دیتابیس ذخیره شده را فراخوانی کنه.
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("ارتباط برقرار نشد: " . $conn->connect_error);
}
$sql = "SELECT * FROM `newposts` ORDER BY `ID` DESC ";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo ' <div class="col-6 col-s-12" class="newpost" style="background:#007bec;text-align:center;border:1px solid #9fcdff;height:220px;background-color:#007bec;margin-top:2%"><img style="text-align:center;width:100%;height:100px;margin-top:0px;border-radius:10px;" src="img/'.$row["img"].'"></br>';
echo '<a style="text-align:center;text-decoration:none;margin-top:30px;background-color:#007bec;background:#007bec;color:white" href="'.$row["link"].'">'.$row["titel"].'</br></a>';
echo '<a style="text-align:center;text-decoration:none;margin-top:20px;background;blue;background-color:blue;color:white" href="'.$row["link"].'"><button style=";color:width;background:blue;height:30px;border:2px solid white;border-radius:10px;">بیشتر بدانید... </br></a></button></div>';
}
} else {
echo "تاکنون نوشته جدیدی ثبت نشده است ";
}
$conn->close();
?>در صورت امکان میخوام کدها بالای باتن بیشتر بدانید قرار داشته باشد. ممنون.برای استخراج و نمایش بخشی از متن دیتابیس کافی است در حلقه while نمونه کدی مشابه زیر داشته باشید:
function limitWord($string, $limit){
$words = explode(" ", $string);
$output = implode(" ", array_splice($words, 0, $limit));
return $output;
}
while($row = $result->fetch_assoc()) {
$string = $row['description'];
echo limitWord($string, 200);
}تابع limitWord که در این آموزش توضیح داده شده است را به کدها اضافه کنید و در حلقه while هر کجا مایل بودید می توانید با دستور echo خروجی ایجاد کنید.سامان
۰۱:۰۷ ۱۴۰۰/۰۵/۱۹
سلام باز هم همون خطا رو گرفت استاد
Notice: Undefined offset: 1 in /storage/ssd5/496/17302496/public_html/time/bekhon.php on line 21
echo $match[1];به این گییر میدهگفتیم خیلی از سایت ها اجازه فراخوانی به این صورت را نمی دهند و اگر این امکان در سایت مورد نظر فعال نباشد، خروجی تولید نمی شود که بخواهیم تگ های آن را بررسی کنیم در نتیجه کد هشدار Undefined offset می دهد، همچنین تگی که بررسی می شود باید در سورس خروجی آن سایت وجود داشته باشد به فرض ممکن است کلاس footer-txt را در سایت example.com بررسی کنیم که باز خطای Undefined خواهیم داشت چون چنین کلاسی در سورس خروجی این آدرس تولید نمی شود به همین دلیل در نمونه کد با curl تگ title در نظر گرفته شده است.
سامان
۰۰:۲۸ ۱۴۰۰/۰۵/۱۸
سلام و عرض ادب میدونم این مطلب برای خیلی وقته اما من تونستم کدی که دادینو بزنم و خروجی بگیرم اما به دلایلی کد پاک شد اما حالا هر کاری میکنم خطا میده پیام خطا هستش
Warning: file_get_contents(https://webgoo.ir/): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /storage/ssd5/496/17302496/public_html/time/bekhon.php on line 2
Notice: Undefined offset: 1 in /storage/ssd5/496/17302496/public_html/time/bekhon.php on line 5که خط دوم هستش$content = file_get_contents('https://webgoo.ir/');و خط 5 هم هستecho $match[1];اینم کد سورس کامل<?php
$content = file_get_contents('https://webgoo.ir/');
$content = str_replace('<tr>', '', $content);
$title = preg_match("/<div class=\"footer-txt\"[^>]*>(.*?)<\\/div>/ims", $content, $match);
echo $match[1];
?>کار نکردن کد به دلیل ایجاد تغییرات در تنظیمات سرور سایت است که حالت نمایش در فریم غیرفعال شده است، به عبارتی کد مشکلی ندارد منتها چون مبتنی بر فرخوانی یک منبع دیگر است قاعدتا منبع مورد نظر می تواند این نوع درخواست ها را مسدود کند، در صورتی که با سایت های HTTPS کار می کنید می توانید از نمونه کد زیر هم استفاده کنید:
<?php
function file_get_contents_ssl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30000);
curl_setopt($ch, CURLOPT_TIMEOUT, 30000);
$result = curl_exec($ch);
curl_close($ch);
//return
return $result;
}
$content = file_get_contents_ssl("https://www.example.com");
$content = str_replace('<tr>', '', $content);
$title = preg_match("/<title>(.*?)<\\/title>/ims", $content, $match);
echo $match[1];
?>حسن
۲۰:۳۵ ۱۴۰۰/۰۲/۳۱
حالا اگه ما بخوایم 5 حرف وسط یه عدد رو جایگزین کنیم چیکار کنیم؟
مثلا شماره تلفن یه فرده نمیخوام 4 حرف وسط شمارش دیده بشه و بجاش ×××× بیاد!
میشه بگین ممنون میشم
مثلا شماره تلفن یه فرده نمیخوام 4 حرف وسط شمارش دیده بشه و بجاش ×××× بیاد!
میشه بگین ممنون میشم
برای مخفی سازی بخش های وسط رشته متنی می توانید از نمونه کد زیر الگوبرداری کنید:
<?php
$number = '09123456789';
$array = str_split($number);
$count = count($array);
$result = '';
for($i = 0; $i < $count; $i++){
if($i > 3 && $i < ($count - 3)){
$result .= '*';
} else {
$result .= $number[$i];
}
}
echo $result;
?>پوریا
۲۲:۴۸ ۱۳۹۹/۱۰/۱۹
سلام
خسته نباشید، ممنونم بابت توضیحات خوبتون، یه مشکلی داشتم میخواستم ببینم امکانش هست راهنمایی کنید؟
فرض کنید یه اینطور متنی داریم:
------------
اونی که جای منه تو چشات زل میزنه
به خدا یه ذره هم دوست نداره
اونی که به خاطرش منو تنها میذاری
دلو ازت پس میگیرم اگرچه بی تو میمیرم
میرم سراغ خاطراتت، تویی که سوزوندی منو
دیگه با من حرف نزنو برو با اونی که میخوادت
چرا بازی میکنی با منی که عاشقم
تو که دیوونه شدی زدی زیر همه چی
------------
میخوام یه سری کار انجام بدم روش:
اول از همه بیاد فاصله اضافی رو برداره (بین پاراگراف دوم و سوم سه تا فاصله هست بجای یک فاصله، اونو تبدیل کنه به یه فاصله) دوم میخوام بجای فاصله های اضافه یه سری کاراکتر نمایش بدم مثلا : ♫♩
سوم هم میخوام مثلا یک خط درمیون یا دو خط درمیون به اخر هر خط ... اضافه کنم.
هر کدوم از این کارا رو به صورت تکی تقریبا اوکی کردم ولی میخوام در نهایت به صورت یه تابع دربیارم که همه این کارارو باهم انجام بده (مثلا مورد اول و دوم که با str_replace اوکی میشه)
متن نهایی به این شکل باشه:
------------
اونی که جای منه تو چشات زل میزنه...
به خدا یه ذره هم دوست نداره
اونی که به خاطرش منو تنها میذاری...
♫♩
دلو ازت پس میگیرم اگرچه بی تو میمیرم
میرم سراغ خاطراتت، تویی که سوزوندی منو...
دیگه با من حرف نزنو برو با اونی که میخوادت
♫♩
چرا بازی میکنی با منی که عاشقم
تو که دیوونه شدی زدی زیر همه چی...
------------
خسته نباشید، ممنونم بابت توضیحات خوبتون، یه مشکلی داشتم میخواستم ببینم امکانش هست راهنمایی کنید؟
فرض کنید یه اینطور متنی داریم:
------------
اونی که جای منه تو چشات زل میزنه
به خدا یه ذره هم دوست نداره
اونی که به خاطرش منو تنها میذاری
دلو ازت پس میگیرم اگرچه بی تو میمیرم
میرم سراغ خاطراتت، تویی که سوزوندی منو
دیگه با من حرف نزنو برو با اونی که میخوادت
چرا بازی میکنی با منی که عاشقم
تو که دیوونه شدی زدی زیر همه چی
------------
میخوام یه سری کار انجام بدم روش:
اول از همه بیاد فاصله اضافی رو برداره (بین پاراگراف دوم و سوم سه تا فاصله هست بجای یک فاصله، اونو تبدیل کنه به یه فاصله) دوم میخوام بجای فاصله های اضافه یه سری کاراکتر نمایش بدم مثلا : ♫♩
سوم هم میخوام مثلا یک خط درمیون یا دو خط درمیون به اخر هر خط ... اضافه کنم.
هر کدوم از این کارا رو به صورت تکی تقریبا اوکی کردم ولی میخوام در نهایت به صورت یه تابع دربیارم که همه این کارارو باهم انجام بده (مثلا مورد اول و دوم که با str_replace اوکی میشه)
متن نهایی به این شکل باشه:
------------
اونی که جای منه تو چشات زل میزنه...
به خدا یه ذره هم دوست نداره
اونی که به خاطرش منو تنها میذاری...
♫♩
دلو ازت پس میگیرم اگرچه بی تو میمیرم
میرم سراغ خاطراتت، تویی که سوزوندی منو...
دیگه با من حرف نزنو برو با اونی که میخوادت
♫♩
چرا بازی میکنی با منی که عاشقم
تو که دیوونه شدی زدی زیر همه چی...
------------
ابتدا باید متن مورد نظر در قسمت ویرایش مطالب در دو کد اختصاصی قرار بگیرد تا امکان انتخاب آن از بین سایر محتوا ممکن باشد، سپس با نمونه کد زیر قبل از ارسال خروجی HTML می توانیم تغییرات را اعمال کنیم:
<?php
function formatMyHTML($html){
$result = null;
$result = preg_replace_callback("/(\[format])(.*)(\[\/format])/ims",
function($matches){
//print_r($matches);
$str = null;
$str = preg_replace('/(<br\s*\/?>\s*){3,}/ims', '<br><br>', $matches[2]);
$str = preg_replace('/(<br>\s*<br>\s*)/ims', '...<br>♫♩<br>', $str);
return $str;
},
$html
);
return $result;
}
$html = '[format]
<br>
اونی که جای منه تو چشات زل میزنه<br>
به خدا یه ذره هم دوست نداره<br>
اونی که به خاطرش منو تنها میذاری<br>
<br>
دلو ازت پس میگیرم اگرچه بی تو میمیرم<br>
میرم سراغ خاطراتت، تویی که سوزوندی منو<br>
دیگه با من حرف نزنو برو با اونی که میخوادت<br>
<br>
<br>
<br>
چرا بازی میکنی با منی که عاشقم<br>
تو که دیوونه شدی زدی زیر همه چی<br>
[/format]';
echo formatMyHTML($html);
?>درج سه نقطه به صورت یکی در میان اعمال نشده چون کمی زمانبر است و الگوی متن هم ثابت نیست.علی
۱۳:۲۸ ۱۳۹۹/۰۵/۰۱
با سلام و تشکر فراوان
اگر یک div خودش درون div دیگری باشد مثل مثال زیر مقدارش رو چطور به دست بیاریم؟
در مثال زیر:
1- فقط مقدار div با کلاس 1 چطور به دست میاد (یعنی «مقدار کلاس 1»)
2- فقط مقدار div با کلاس 2 چطور به دست میاد (یعنی «مقدار کلاس 2»)
ممنون از پاسخ خوبتون...
اگر یک div خودش درون div دیگری باشد مثل مثال زیر مقدارش رو چطور به دست بیاریم؟
در مثال زیر:
1- فقط مقدار div با کلاس 1 چطور به دست میاد (یعنی «مقدار کلاس 1»)
2- فقط مقدار div با کلاس 2 چطور به دست میاد (یعنی «مقدار کلاس 2»)
<div class="1">
مقدار کلاس 1
<div class="2">
مقدار کلاس 2
</div>
</div>3- و همینطور اگر چند div زیر مجموعه هم باشند.ممنون از پاسخ خوبتون...
برای دریافت مقادیر در تگ های div با استفاده از پارامتر class می توانید یکی از روش های زیر را استفاده کنید:
<?php
$html = '<div class="1">
مقدار کلاس 1
<div class="2">
مقدار کلاس 2
</div>
</div>';
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('div') as $tag) {
if($tag->getAttribute('class') == 2) {
echo $tag->textContent;
}
}
$pattern = '<div.*class="2"[^>]*>([^<]*)<\/div>';
preg_match('/' . $pattern . '/i', $html, $matches);
//print_r($matches);
echo $matches[1];
?>در مورد سوال سوم لطفا نمونه کد با خروجی مد نظر درج کنید.امیرمحمد
۱۹:۳۰ ۱۳۹۸/۰۸/۰۸
سلام و خسته نباشید استاد
بنده میخوام بین دو کد زیر که مشخص کردم رو به دست بیارم
بنده میخوام بین دو کد زیر که مشخص کردم رو به دست بیارم
// ---------------------set
سلام
// ---------------------setکلمه (سلام) رو بدست بیارم بین دو کد بالادر صورتی که الگوی مد نظر ثابت و به صورت نمونه باشد روش زیر کاربرد دارد:
<?php
$str = '// ---------------------set
سلام
// ---------------------set';
preg_match('/(\/\/[\s]*[\-]+set)(.+)(\/\/[\s]*[\-]+set)/isU', $str, $matches);
//print_r($matches);
echo $matches[2];
?>۲۱:۲۰ ۱۳۹۷/۱۰/۱۹
سلام وقت بخیر
چطور میشه یک صفحه سایت رو درون یک صفحه html نمایش داد ؟ نمیخوام از iframe استفاده کنم و میخوام با html و php باشه
چطور میشه یک صفحه سایت رو درون یک صفحه html نمایش داد ؟ نمیخوام از iframe استفاده کنم و میخوام با html و php باشه
لطفا در خصوص استفاده از تابع file_get_contents یا curl در PHP جستجو کنید، با این توابع می توانید خروجی صفحه سایت را دریافت و در سایت خود نمایش دهید.
امیر
۱۹:۴۸ ۱۳۹۷/۰۶/۲۲
ممنون بابت آموزش
محمود
۱۱:۲۷ ۱۳۹۷/۰۵/۲۱
من هنوز اول راه هستم ولی خیلی دوست دارم این زبان را بصورت کامل یاد بگیرم. این کدها جدولی با ردیف های مشخص را نشان می دهد. لطفن کدها را طوری تغییر بدهید که با انتخاب (زرد کردن) هر row که انتخاب کردم بشود آن را حذف کرد. نه بصورتی که الان است. در ضمن آیا میشود شماره ردیف ها خاصیت ol را دارا باشند یعنی با حذف ردیف 3 ، شماره ها به هم نخورند و دوباره 3 و 4 5 .. شود. اگر ممکن است کد جاوا اسکریپ آن را نیز بنویسید متشکر هستم.
حذف شدباید سعی کنید خودتان حداقل بخشی از کدها را بنویسید و صرفا به صورت موردی در هر قسمت دچار مشکل بودید مطرح نمائید تا بررسی گردد، اینگونه موارد زمانبر بوده و نیاز به کدنویسی اختصاصی دارد، به هر صورت برای مشکلاتی که مطرح کرده اید می توانید توابع را به شکل زیر تغییر دهید (تست شده):
نکته: بهتر است ردیف اول آی دی 0 داشته باشد که در اینجا ظاهرا مقدار 2 را در نظر گرفته اید!
<script type="text/javascript">
var selected = 0;
function myclick(_id){
if(selected != 0 && document.getElementById(selected) != null){
document.getElementById(selected).style.background = "#FFFFFF";
}
document.getElementById(_id).style.background = "yellow";
selected = _id;
}
function myDeleteFunction(){
if(selected > 0){
var row = document.getElementById(selected);
var table = row.parentNode;
while(table && table.tagName != 'TABLE'){
table = table.parentNode;
}
if(!table){
return;
}
table.deleteRow(row.rowIndex);
reSortTable();
}
}
function reSortTable(){
var table = document.getElementById("myTable");
var rows = table.rows.length;
for(var i = 1; i < rows; i++){
table.rows[i].cells[3].innerHTML = i;
}
}
</script>طراحی و خطایابی نیازمند تسلط شما در جاوا اسکریپت است در غیر اینصورت به راحتی و با چند ایراد جزئی با خطاهای مختلف روبرو شده و معمولا کل برنامه از کار می افتد!نکته: بهتر است ردیف اول آی دی 0 داشته باشد که در اینجا ظاهرا مقدار 2 را در نظر گرفته اید!
محمود
۱۱:۱۵ ۱۳۹۷/۰۵/۱۶
سلام .
پری روز پاسخ شما را دیدم و در برنامه قرار دادم و بسیار کمک کرد. فقط چون اعداد اعشاری نیز در ستون نمره ها باید جمع بسته می شد ، برای همین این دو روز رویش کار می کردم تا با تغییر کد شما بلکه اعداد اعشاری ستون را نیز جمع کنم تا اینکه امروز دستور بسیار ساده اون را یافتم. به جای parseInt از parseFloat استفاده کردم و مشکل حل شد.
تشکر از سایت خوبتان. کارتان عالی است.
ولی من هنوز مشکل هایی دارم .
خواستید نگاه کنید.
پری روز پاسخ شما را دیدم و در برنامه قرار دادم و بسیار کمک کرد. فقط چون اعداد اعشاری نیز در ستون نمره ها باید جمع بسته می شد ، برای همین این دو روز رویش کار می کردم تا با تغییر کد شما بلکه اعداد اعشاری ستون را نیز جمع کنم تا اینکه امروز دستور بسیار ساده اون را یافتم. به جای parseInt از parseFloat استفاده کردم و مشکل حل شد.
تشکر از سایت خوبتان. کارتان عالی است.
ولی من هنوز مشکل هایی دارم .
خواستید نگاه کنید.
http://asanbood.ir/%d8%a2%d8%b2%d9%85%d9%88%d9%86-%d8%b3%d8%a7%d8%b2-%d9%87%d9%81%d8%aa%d9%85/%d8%b9%d9%84%d9%88%d9%85-%d9%87%d9%81%d8%aa%d9%85/ممنون از یادآوری نکته ای که جا مانده بود!، پاسخ اصلاح شد، برای اینکه به مشکل بر نخورید باید جاوا اسکریپت را از مقدمات خوب یاد بگیرید، بسیاری از راه حل ها در طراحی رابط کاربری وب نیاز به داشتن دانش و تجربه قبلی در مباحث این زبان دارند.
محمود
۱۱:۵۴ ۱۳۹۷/۰۵/۱۳
سلام.
من میخواهم مجموع اعداد ستون ID (نمره) در جدول بالا که کد هایش را نوشتید بصورت دینامیک با هر بار اضافه شدن ردیف
نشان داده شود. البته اعداد قابل تغییر هستند یعنی یک یک اضافه نمی شوند ممکن است اعداد اعشاری نیز در بین شان درج شود.
من میخواهم مجموع اعداد ستون ID (نمره) در جدول بالا که کد هایش را نوشتید بصورت دینامیک با هر بار اضافه شدن ردیف
نشان داده شود. البته اعداد قابل تغییر هستند یعنی یک یک اضافه نمی شوند ممکن است اعداد اعشاری نیز در بین شان درج شود.
حذف شدبرای نمایش مجموع اعداد ستون نمره دستورات زیر را به انتهای تابع setPrintText اضافه کنید:
var all_rows = table.rows.length;
var all_value = 0;
for(var i = 1; i < all_rows; i++){
all_value += parseFloat(table.rows[i].cells[0].innerHTML);
}
document.getElementById('demo').innerHTML = 'مجموع نمرات ستون: ' + all_value;محمود
۱۰:۰۴ ۱۳۹۷/۰۴/۱۵
دوباره سلام و احترام
نمی توانم بگم که کدنویسی را یاد گرفته ام ولی هنوز دارم مطالعه و تمرین می کنم و سایت بسیار خوب شما به من کمک زیادی کرده است. کدهای بالا برای کار من خیلی خوب هستند و من از حضرت عالی کمال تشکر را دارم . در پست دیگری اگر یادتان باشد دوباره مزاحم شما شدم و درباره دکمه حذف خانه های جدول و یا متن داخل آن ، یاری رساندید. من کدها را می خواهم در این قسمت اجرا کنم. ولی چون ردیف های جدول از قبل وجود ندارند و دارای id نیستند نمیتوانم متن های داخل آنها را انتخاب ، ویرایش یا حذف کنم به کمکتان دوباره احتیاج دارم. کدهایی را به نمونه کدهای بالا اضافه کردم ، خواهش می کنم آن را اجرا کنید و اشکال های آن را برطرف نمائید. تا دکمه های ویرایش و حذف و سیو کردن اجرا شوند. من نمی خاهم اولین row جدولم را تغییر بدهم و فقط برای مثال به این شکل کد نویسی کرده ام.
با تشکر فراوان.
نمی توانم بگم که کدنویسی را یاد گرفته ام ولی هنوز دارم مطالعه و تمرین می کنم و سایت بسیار خوب شما به من کمک زیادی کرده است. کدهای بالا برای کار من خیلی خوب هستند و من از حضرت عالی کمال تشکر را دارم . در پست دیگری اگر یادتان باشد دوباره مزاحم شما شدم و درباره دکمه حذف خانه های جدول و یا متن داخل آن ، یاری رساندید. من کدها را می خواهم در این قسمت اجرا کنم. ولی چون ردیف های جدول از قبل وجود ندارند و دارای id نیستند نمیتوانم متن های داخل آنها را انتخاب ، ویرایش یا حذف کنم به کمکتان دوباره احتیاج دارم. کدهایی را به نمونه کدهای بالا اضافه کردم ، خواهش می کنم آن را اجرا کنید و اشکال های آن را برطرف نمائید. تا دکمه های ویرایش و حذف و سیو کردن اجرا شوند. من نمی خاهم اولین row جدولم را تغییر بدهم و فقط برای مثال به این شکل کد نویسی کرده ام.
با تشکر فراوان.
حذف شدموارد اشاره شده نیاز به کدنویسی های اختصاصی زمانبر دارد که متاسفانه به دلیل کمبود فرصت و لزوم پاسخگویی به تمام سوالات کاربران سایت این امکان بیش از این مقدور نمی باشد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.