چگونه src تگ img را در زبان برنامه‌نویسی PHP به دست آوریم؟

چگونه src تگ img را در زبان برنامه‌نویسی PHP به دست آوریم؟

دولوپرهای زبان 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

اکنون اگر متغیر source$ را با استفاده از دستور echo چاپ کنیم، خواهیم دید که مقدار images/image.jpg نمایش داده خواهد شد.

روش دوم: استفاده از فانکشن preg_match
در زبان PHP، فانکشنی از پیش تعریف شده وجود دارد تحت عنوان preg_match که استفاده از Regex که مخفف واژگان Regular Expression است را برای ما ساده می‌سازد (برای آشنایی بیشتر با این مفهوم، به مقالهٔ راهنمای رگولار اکسپرشن (Regular Expression) یا ریجکس (Regex) برای برنامه‌نویسان مبتدی مراجعه نمایید). در این روش، کدهایی با استفاده از رجیکس می‌نویسیم که در یک استرینگ بگردد و هر کجا که یک تگ 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 را به دست آوریم.

حال نوبت به نظرات شما می‌رسد. شما چه راه‌کار دیگری برای استخراج تگ img با استفاده از زبان PHP پیشنهاد می‌دهید؟ نظرات، دیدگاه‌ها و تجربیات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.

منبع