دولوپرهای زبان PHP گاهی اوقات با شرایطی مواجه میشوند که نیاز دارند تا مقادیر اتریبیوتهای تگهای HTML را استخراج کنند و در جایی دیگر مورد استفاده قرار دهند. به طور مثال، زمانی که یک برنامهنویس بخواهد سایتی را اصطلاحاً Scrap کند و اطلاعات خاصی از آن را در سایت دیگری نمایش دهد، نیاز به چنین کاری خواهد داشت (Scrap یا Crawl کردن به خواندن اطلاعات یک سایت، ذخیرهٔ آنها و نمایش مجدد آنها در سایت دیگری گفته میشود و نیاز به توضیح نیست که این کار گاهی برخلاف قوانین #کپیرایت بوده و غیرقانونی است!)
زمانی که ما اطلاعات یک تگ <img> را داشته باشیم، از طریق روشهای متعددی میتوانیم اطلاعات این تگ را استخراج کنیم که در این مقاله دو روش معمول در زبان برنامهنویسی PHP را مورد بررسی قرار خواهیم داد.
استفاده از کلاسی تحت عنوان DOMDocument
در زبان PHP، کلاسی تحت عنوان DOMDocument وجود دارد که این امکان را به دولوپرها میدهد تا یک ورودی HTML یا XML به آن داده، سپس از متدهای از پیش تعریف شدهٔ این کلاس استفاده کرده تا بتوانند اتریبیوتهایی که نیاز دارند را استخراج کنند. برای شروع، تگ زیر را در نظر میگیریم:
<img src="/images/image.jpg" alt="Image" width="100" height="100" />
حال با ساخت یک آبجکت از روی کلاس DOMDocument تحت عنوان doc$ و فراخوانی متد ()loadHTML، متغیری تحت عنوان html$ که از قبل سورس HTML خود را در آن ذخیره کرده بودیم را به آن پاس داده سپس یک آبجکت جدید تحت عنوان xpath$ از روی کلاس DOMXPath میسازیم و آبجکت doc$ که اکنون حاوی تگهای HTML است را به آن پاس میدهیم و در نهایت یک متغیر دیگر تحت عنوان sourse$ ساخته و مقدار آن را برابر با آبجکت ساخته شده از روی کلاس DOMXPath به همراه فراخوانی متدی تحت عنوان ()evaluate قرار داده و "(string(//img/@src" را به عنوان پارامتر ورودی آن در نظر میگیریم:
$html = '<img src="/images/image.jpg" alt="Image" width="100" height="100" />';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$source = $xpath->evaluate("string(//img/@src)");
echo $source; //Will return /images/image.jpg
استفاده از فانکشن ()preg_match
در زبان PHP، فانکشنی از پیش تعریف شده وجود دارد تحت عنوان ()preg_match که استفاده از رجیکس را برای ما ساده میسازد (برای آشنایی بیشتر با این مفهوم، به دورهٔ آموزش رگیولار اکسپرشن مراجعه نمایید.) در این روش، کدهایی با استفاده از رجیکس مینویسیم که در یک استرینگ بگردد و هر کجا که یک تگ <img> دید، اتریبویت src آن را استخراج کرده و مقدارش را بازگرداند:
$html = '<img src="/images/image.jpg" alt="Image" width="100" height="100" />';
preg_match( '@src="([^"]+)"@' , $html, $match );
$source = array_pop($match);
echo $source; //Will return /images/image.jpg
در فانکشن ()preg_match، دستور دادهایم که متغیری تحت عنوان html$ جستجو شود و مقدار اتریبیوت src آن بیرون کشیده شده و داخل متغیری تحت عنوان match$ ریخته شود. از این پس، متغیر match$ همچون آرایهای است که دو مقدار دارد که ما صرفاً مقدار اول آن را نیاز داریم. سپس با استفاده از فانکشن ()array_pop، مقدار دوم آن را حذف کرده و در نهایت خواهیم دید که با استفاده از دستور echo چگونه میتوان مقدار اتریبیوت src را به دست آوریم (چنانچه علاقمند به فراگیری گام به گام زبان برنامهنویسی PHP هستید، میتوانید به دورهٔ آموزش PHP در سکان آکادمی مراجعه نمایید.)