הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   הצאת מילה בין תגי html (https://hosts.co.il/forums/showthread.php?t=106565)

dor77 14-03-14 13:53

הצאת מילה בין תגי html
 
שלום.
אני מתחבר לאתר כלשהו באמצעות curl, שואב את קוד המקור שלו ורוצה לקחת את כל התוכן שיש בין 2 תגיות html..חשוב לציין שכל פעם התגיות יכולות להשתנות לכן אני חייב שזה יהיה דימני.
בהוצאת מילה בין שתי מילים אין בעיה..אבל כשמערבים תגיות של html זה נותן שגיאה.

PHP קוד:

Undefined offset1 in D:wampwwwcurl.php on line 29 

זו שורה 29:

PHP קוד:

echo $match[1]; 

הנה הקוד:

PHP קוד:


function get_source_code($url)
{
  
$ch curl_init();
  
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1)".
                            
" Gecko/20061204 Firefox/2.0.0.1";
  
  
curl_setopt($chCURLOPT_URL$url);
  
curl_setopt($chCURLOPT_HEADER0);
  
curl_setopt($chCURLOPT_USERAGENT$useragent);
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);    
  
  
$source_code curl_exec($ch);
  
  
curl_close($ch);
  
$source_code nl2br(htmlspecialchars($source_code));
}

$s_c get_source_code('http://www.blabla.com');

$start '<div id="login">';
$end '<div id="search">';
preg_match('/'.preg_quote($start).'(.*?)'.preg_quote($end).'/is'$s_c$match);
echo 
$match[1]; 


אשמח לעזרה, תודה.

בניה 15-03-14 12:30

למה ה nl2br(htmlspecialchars(?

השגיאה מרמזת על זה שהביטוי רגולרי לא מצא את מה שאתה רוצה שהוא ימצא לכן במערך של התוצאות אין את התא 1

dor77 15-03-14 12:34

אוקייף הסרתי את שתי הפוקנציות האלה..
גם עכשיו, שגיאה.

PHP קוד:


function get_source_code($url)
{
  
$ch curl_init();
  
$useragent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36";
  
  
curl_setopt($chCURLOPT_URL$url);
  
curl_setopt($chCURLOPT_HEADER0);
  
curl_setopt($chCURLOPT_USERAGENT$useragent);
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);
  
  
$source_code curl_exec($ch);
  
  
curl_close($ch);
  
$source_code $source_code;
  return 
$source_code;
}

$s_c get_source_code('http://www.blabla.com');

$start '<li class="menu"><a href="#">';
$end '</a>';
preg_match('/'.preg_quote($start).'(.*?)'.preg_quote($end).'/is'$s_c$match);
echo 
$match[1]; 

הstart וend מופיעים ככה בקוד מקור, אני מנסה לקבל את מה שבניהם.
עכשיו אני מקבל:

PHP קוד:

Warningpreg_match(): Unknown modifier 'a' in D:wampwwwcurl.php on line 24 

תודה רבה!

בניה 15-03-14 12:39

את ה preg_quote תעשה ככה:
PHP קוד:

preg_quote($val'/'

ותקרא בתיעוד מה זה עושה
http://il1.php.net/preg_quote

dor77 15-03-14 12:54

רק ל start?
ככה:

PHP קוד:

preg_match(preg_quote($start'/').'(.*?)'.preg_quote($end).'/is'$s_c$match); 

או גם לend, ככה:

PHP קוד:

preg_match(preg_quote($start'/').'(.*?)'.preg_quote($end'/').'/is'$s_c$match); 

זה אמור לסדר את הקטע של הסלאשים?
עדיין שגיאה..

בניה 15-03-14 12:57

ציטוט:

נכתב במקור על ידי dor77 (פרסם 887467)
רק ל start?
ככה:

PHP קוד:

preg_match(preg_quote($start'/').'(.*?)'.preg_quote($end).'/is'$s_c$match); 

או גם לend, ככה:

PHP קוד:

preg_match(preg_quote($start'/').'(.*?)'.preg_quote($end'/').'/is'$s_c$match); 

זה אמור לסדר את הקטע של הסלאשים?
עדיין שגיאה..

שניהם...
תקרא מה זה עושה. זה עושה escape גם ל delimiter שלך
מה השגיאה עכשיו?

dor77 15-03-14 13:01

זו השגיאה:

PHP קוד:

preg_match(): Delimiter must not be alphanumeric or backslash in D:wampwwwcurl.php on line 24 

זה מה שעשיתי:

PHP קוד:

preg_match(preg_quote($start'/').'(.*?)'.preg_quote($end'/').'/is'$s_c$match); 


בניה 15-03-14 13:44

תחזיר את ה / זה הדלימיטר, והוא צריך להיות גם בתור פרמטר ל preg_quote

dor77 15-03-14 14:08

בדיוק שמתי לב והחזרתי אותו רבל יש בעיה אחת..הוא אכן מציג את המ שאני רוצה אבל כאשר אני נותן לstart ו end ערכים כמו:

PHP קוד:

$start '</ul>
            </li>
            <li class="menu-item"><a href="store.php">'
;
$end '</a></li>
          </ul>
        </nav>
    </div>'
;
preg_match('/'.preg_quote($start'/').'(.*?)'.preg_quote($end'/').'/is'$s_c$match);
echo 
$match[1]; 

אני מקבל שגיאה:

PHP קוד:

Undefined offset1 in D:wampwwwcurl.php on line 45 

ועשיתי העתק הדבק, לא המצאתי ירידת שורה או רווחים למיניהם.

וזו השורה:

PHP קוד:

echo $match[1]; 

שוב, אם הייתי נותן ערכים כאלו:

PHP קוד:

$start '<span class="name">';
$end '</span>'

זה עובד מעולה.
ה preg_match שלי כתוב נכון?

PHP קוד:

preg_match('/'.preg_quote($start'/').'(.*?)'.preg_quote($end'/').'/is'$s_c$match); 

תודה רבה.

בניה 15-03-14 14:15

חשוב להבין משהו "Undefined offset:"
זו לא שגיאה של תקלה בקוד אלא פשוט הוא לא מוצא לפי הקלט שהבאת לו, ואתה צריך לשחק עם הSTART/END ואולי גם לכתוב ביטוי רגולרי יותר מתוחכם.

וגם ירידת שורה נחשב תו שהביטוי רגולרי אמור לתפוס.

אם אתה רוצה לנסות לעשות לעצמך חיים יותר קלים אפשר לעשות STRIP לירידות שורה

משהו כזה:
PHP קוד:

str_replace(array("\r""\n"), ''$string

http://stackoverflow.com/a/6766580/711152


כל הזמנים הם GMT +2. הזמן כעת הוא 19:53.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ