PDA

View Full Version : جستجوی تگ html در php



amirhoseinonline
چهارشنبه 25 خرداد 1390, 20:07 عصر
سلام


من تازه پی اچ پی کار میکنم، نمیدونم این سوالی که میکنم انجام شدنی هست یا نه!
من میخواستم یک تگ html مثلا:

<div id="test"></div>
رو در یک فایل مثلا index.php جستجو کنم و از موجود بودن یا نبودن اون اطلاع پیدا کنم تا بعد از این کار با دستور شرطی یه پروسه ای رو انجام بدم
در ضمن این کد در همین فایل باید باشه.

حالا اگه دوستان آشنا هستن
لطف کنن منو راهنمایی کنن

ممنون

$ M 3 H R D A D $
چهارشنبه 25 خرداد 1390, 21:02 عصر
سلام
با خخیلی از روش ها میشه
عبارت منظم دستورات برش و دستورات رشته
اما من یک کلاس براتون میزارم که ازین به بعد شما مثل دستورات sql میتونید با تگ ها کار کنید
بدید :



select * from DIV WHERE $id=='test'




تشکر یادت نره

amirhoseinonline
پنج شنبه 26 خرداد 1390, 00:23 صبح
سلام

ممنون از توجه شما

ولی من نمیخوام اینهمه دنگو فنگ داشته باشه

من یه کد ساده میخوام که وجود تگ
<div id="test"></div>

شناسایی کنه
همین

زیاد به این چیزی که گفتید نیازی ندارم
من لنگ اینم که وجود این تگ رو در فایل index.php تعیین کنم.


پیشاپیش ممنون از راهنمایی شما

$ M 3 H R D A D $
پنج شنبه 26 خرداد 1390, 09:44 صبح
شما اون کلاس و نگاه کن کل روش هایی که گفتم میشه توی اون بکا رفته !
من بگم explod که تو اینکلاس هست بگم preg_match بازم هست
شما الان میگی دنگو فنگ اما کلاسه دیگه ! نسبت به شررایطی که میخوای یک تکه کد ساخت یافته و نرمال و برات اجرا میکنه
خود کلاس و ببین میفهمی منظورم و

$ M 3 H R D A D $
پنج شنبه 26 خرداد 1390, 09:45 صبح
راستی
search html tag in php
google

wallfa
پنج شنبه 26 خرداد 1390, 11:09 صبح
مهرداد جان شاید این براش کاربردی تر باشه :

$html = preg_replace('/(<strong>.*?)(Paintball Mask)(.*?<\/strong>)/', '$1<a href="...">$2</a>$3', $html);

wallfa
پنج شنبه 26 خرداد 1390, 11:13 صبح
function strip_html_tags( $text )
{
// PHP's strip_tags() function will remove tags, but it
// doesn't remove scripts, styles, and other unwanted
// invisible text between tags. Also, as a prelude to
// tokenizing the text, we need to insure that when
// block-level tags (such as <p> or <div>) are removed,
// neighboring words aren't joined.
$text = preg_replace(
array(
// Remove invisible content
'@<head[^>]*?>.*?</head>@siu',
'@<style[^>]*?>.*?</style>@siu',
'@<script[^>]*?.*?</script>@siu',
'@<object[^>]*?.*?</object>@siu',
'@<embed[^>]*?.*?</embed>@siu',
'@<applet[^>]*?.*?</applet>@siu',
'@<noframes[^>]*?.*?</noframes>@siu',
'@<noscript[^>]*?.*?</noscript>@siu',
'@<noembed[^>]*?.*?</noembed>@siu',

// Add line breaks before & after blocks
'@<((br)|(hr))@iu',
'@</?((address)|(blockquote)|(center)|(del))@iu',
'@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
'@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
'@</?((table)|(th)|(td)|(caption))@iu',
'@</?((form)|(button)|(fieldset)|(legend)|(input))@iu' ,
'@</?((label)|(select)|(optgroup)|(option)|(textarea)) @iu',
'@</?((frameset)|(frame)|(iframe))@iu',
),
array(
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
"\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
"\n\$0", "\n\$0",
),
$text );

// Remove all remaining tags and comments and return.
return strip_tags( $text );
}
/* Read an HTML file */
$raw_text = file_get_contents( $filename );

/* Get the file's character encoding from a <meta> tag */
preg_match( '@<meta\s+http-equiv="Content-Type"\s+content="([\w/]+)(;\s+charset=([^\s"]+))?@i',
$raw_Text, $matches );
$encoding = $matches[3];

/* Convert to UTF-8 before doing anything else */
$utf8_text = iconv( $encoding, "utf-8", $raw_text );

/* Strip HTML tags and invisible text */
$utf8_text = strip_html_tags( $utf8_text );

/* Decode HTML entities */
$utf8_text = html_entity_decode( $utf8_text, ENT_QUOTES, "UTF-8" );

?>

alismith
پنج شنبه 26 خرداد 1390, 11:23 صبح
سلام

البته کلاسی که دوستمون معرفی کردند عالی بود و دستشون درد نکنه اما چون شما قصد استفاده از آن را ندارید گفتم یک مثال براتون بزنم شاید کمکتون کنه



<?php

$targ = "url";
if ($fp = fopen($targ, 'r')) {
$content = '';

while (!feof($fp)) {
$line[] = fgets($fp);



}
foreach($line as $val){

if(strstr($val,'<div id="test"></div>')){ echo 'true'; }

}

?>



موفق باشید

raico90
پنج شنبه 26 خرداد 1390, 16:29 عصر
با این کلاسی که ارائه شده...چجوری میشه محتویات بین دو تگ دلخواه یونیک رو خروجی گرفت؟
مثلا متنی که از این تگ

<span class=lm>
به بعد شروع میشه و تا ابتدای این تگ ادامه داره.

<div class=nx>

$ M 3 H R D A D $
پنج شنبه 26 خرداد 1390, 18:25 عصر
توی example هاش اشاره شده

raico90
پنج شنبه 26 خرداد 1390, 23:28 عصر
من تو هیچکدوم از مثالها همچین چیزی ندیدم.
میشه کدی که میگید رو اینجا بزارید؟

من با این هم نتیجه ای نگرفتم...فکر میکنم نمیتونه سورسی که ذخیره شده رو تحلیل کنه....یحتمل برای یک خط نوشته مشخص این آیتم جواب میده :


function getBetween($html, $start, $end, $keepStart=0, $keepEnd=0) {
$matches = array();
if (preg_match('/' . $start . '(.*?)'. $end . '/', $html, $matches)) {
$return = $matches[1];
if ($keepStart) $return = $start . $return;
if ($keepEnd) $return = $return . $end;
return $return;
} else {
return false;
}
}

$ M 3 H R D A D $
جمعه 27 خرداد 1390, 00:31 صبح
demo 10
اینو نگاه کن

alismith
جمعه 27 خرداد 1390, 00:32 صبح
سلام

این کدی که نوشتم مشکل شما رو حل می کنه :

اول فایل test.php



<html>
<head>
</head>
<body>

<span class=lm>
For Example
<div class=nx>

</body>

</html>


و این هم روش استخراج متن مورد نظر : (ویرایش شد)



<?php
$content = array();
$str="";
$pos;
$x = 0;
$tag = "<span class=lm>";
$tag2 = "<div class=nx>";

$file = fopen('test.php','r');

while(!feof($file)){


$line[] = fgets($file);


}


foreach($line as $val){



if(strstr($val,$tag)){

$pos = strpos($val,$tag);
$i = $pos + 15;
for($i; $i != strlen($val); $i++){

$str .= $val[$i];
}

$content[] = $str;
$x = 1;

}

if($x == 1){

if(!strstr($val,$tag2)){

$content[] = $val;

}else if(strstr($val,$tag2)){
$pos="";
$str="";
$pos = strpos($val,$tag2);

for($i=0; $i < $pos; $i++){

$str .= $val[$i];
}

$content[] = $str;

break;

}

}

}
foreach($content as $val){

echo $val;

}







موفق باشید

raico90
یک شنبه 29 خرداد 1390, 18:10 عصر
اگه قرار باشه بیش از یک آیتم از صفحه در بیاریم اونوقت چی؟
البته من با تغییر نام Tagو tag2 به tag3 و tag4 تونستم دو آیتم رو استخراج کنم.

راه آسان تر دیگه ای هست؟

اگه بفرض 4 آیتم هست که مثل مورد اول دارای تگهای یونیک ابتدا و انتها باشه...میشه همه رو مقداردهی کرد؟ یعنی یک بار پروسه برای همشون اجرا بشه...به جای اینکه برا هر کدوم جدا جدا پروسه اجرا بشه.
البته نمیدونم امکان پذیر هست یا نه...به سرعت کار کمکی میکنه یا نه...فشار کمتری به سرور میاره یا نه !

blackmak
دوشنبه 30 خرداد 1390, 18:33 عصر
میتونی با jquery هم تگهارو جستجو کنی . دستت خیلی بازه تو select کردنه هر تگ اچ تی ام الی .