برنامه نویسان زبان محبوب پی اچ پی خیلی از اوقات با شرایطی مواجه میشوند که نیاز دارند تا مقادیر اتریبیوت های تگ های اچ تی ام ال را استخراج کنند و در جایی دیگر مورد استفاده قرار دهند. به طور مثال، زمانی که یک برنامه نویس بخواهد سایتی را اصطلاحاً Scrap کند و اطلاعات خاصی از آن را در سایت خودش نمایش دهد، نیاز به چنین کاری خواهد داشت (Scrap یا Crawl کردن به خواندن اطلاعات یک سایت، ذخیره ی آنها و نمایش مجدد آنها در سایت دیگری گفته می شود.)
زمانی که ما اطلاعات یک تگ img را داشته باشیم، از طریق روشهای متعددی میتوانیم اطلاعات این تگ را استخراج کنیم که در این ترفند، دو روش معمول در زبان برنامه نویسی پی اچ پی را مورد بررسی قرار خواهیم داد.
روش اول: استفاده از کلاسی تحت عنوان DOMDocument
در زبان پی اچ پی، کلاسی تحت عنوان DOMDocument وجود دارد که این امکان را به برنامه نویسان میدهد تا یک ورودی HTML یا XML به آن داده سپس از متدهای از پیش تعریف شده برای این کلاس استفاده کرده تا بتوانند اتریبیوت هایی که نیاز دارند را استخراج کنند. برای شروع، تگ زیر را در نظر می گیریم:
<img src="/images/image.jpg" alt="Image" width="100" height="100" />
حال با ساخت یک آبجکت از روی کلاس DOMDocument تحت عنوان doc$ و فراخوانی متد ()loadHTML آن، متغیری تحت عنوان html$ که از قبل سورس اچ تی ام ال خود را در آن ذخیره کرده بود را به آن پاس می دهیم. سپس یک شیء جدید تحت عنوان xpath$ از روی کلاس DOMXPath میسازیم و آبجکت doc$ را که اکنون حاوی تگ های اچ تی ام است به آن پاس می دهیم.
در نهایت، یک متغیر دیگر تحت عنوان 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
در زبان پی اچ پی، تابعی از پیش تعریف شده وجود دارد تحت عنوان preg_match که استفاده از Regex که مخفف واژگان Regular Expression است را برای ما ساده می سازد. در این روش، کدهایی با استفاده از رجیکس می نویسیم که در یک استرینگ بگردد و هر کجا که یک تگ 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 را داشته باشیم، از طریق روشهای متعددی میتوانیم اطلاعات این تگ را استخراج کنیم که در این ترفند، دو روش معمول در زبان برنامه نویسی پی اچ پی را مورد بررسی قرار خواهیم داد.
روش اول: استفاده از کلاسی تحت عنوان DOMDocument
در زبان پی اچ پی، کلاسی تحت عنوان DOMDocument وجود دارد که این امکان را به برنامه نویسان میدهد تا یک ورودی HTML یا XML به آن داده سپس از متدهای از پیش تعریف شده برای این کلاس استفاده کرده تا بتوانند اتریبیوت هایی که نیاز دارند را استخراج کنند. برای شروع، تگ زیر را در نظر می گیریم:
<img src="/images/image.jpg" alt="Image" width="100" height="100" />
حال با ساخت یک آبجکت از روی کلاس DOMDocument تحت عنوان doc$ و فراخوانی متد ()loadHTML آن، متغیری تحت عنوان html$ که از قبل سورس اچ تی ام ال خود را در آن ذخیره کرده بود را به آن پاس می دهیم. سپس یک شیء جدید تحت عنوان xpath$ از روی کلاس DOMXPath میسازیم و آبجکت doc$ را که اکنون حاوی تگ های اچ تی ام است به آن پاس می دهیم.
در نهایت، یک متغیر دیگر تحت عنوان 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
در زبان پی اچ پی، تابعی از پیش تعریف شده وجود دارد تحت عنوان preg_match که استفاده از Regex که مخفف واژگان Regular Expression است را برای ما ساده می سازد. در این روش، کدهایی با استفاده از رجیکس می نویسیم که در یک استرینگ بگردد و هر کجا که یک تگ 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 را به دست آوریم