웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우 parse_url() 함수사용 분리한결과는 array에저장 ( 리턴 ) parse_url array parse_url (string url) Page 2 1
URL 분석 (2/2) 예제 (parse_url.php) $parse_arr = parse_url ( http://kim:3579@www.hostname.com:80/doc/index.html ); print $parse _ arr[host]. <br> ; print $parse_arr[port]. <br> ; print $parse_arr[path]. <br> ; print $parse_arr[user]. <br> ; print $parse_arr[pass]. <br> ; Page 3 URL 내용읽어오기 (1/4) 다른홈페이지의문서를읽어오거나 URL 문서에서필요한정보를추출하는방법 fopen() 함수를이용하여매개변수위치에 URL 을삽입 홈페이지의문서를읽어와서출력 (readsite1.php) $fp = fopen ( http://kr.yahoo.com/, r ) or die ( 요청하신페이지를읽어올수없습니다. ); while ($line = fgets($fp, 1024)) print $line; fclose ($fp); Page 4 2
URL 내용읽어오기 (2/4) 수행결과 (readsite1.php) Page 5 URL 내용읽어오기 (3/4) 다른방법 fopen() 및 fgets() 대신에 readfile() 함수를사용 readfile() 함수는파일의내용을읽어서바로출력하기때문에별도의읽기및출력과정이필요하지않음 주의점 : 파일의이름을넘겨주는파라미터에반드시사용하는프로토콜 (http://) 을지정하는부분이들어가야함 예제 (readsite2.php) readfile ( http://www.daum.net/ ); Page 6 3
URL 내용읽어오기 (4/4) 수행결과 (readsite2.php) Page 7 링크 (link) 읽어오기 (1/3) 특정사이트의문서에포함되어있는링크만을읽어올경우 <A HREF> 태그로시작되는부분을읽어옴 ( 예 : <A HREF= http://cs.kangwon.ac.kr>..) 정규표현식을사용하여태그를찾음 개념적표현형태 : <, 임의의문자들, a, 임의의문자들, href=, 임의의문자들, >, 임의의문자들, </, 임의의문자들, a, 임의의문자들, > 순 정규표현식형태 : /<.*a.*href=.*>.*<\/.*a.*>/ Page 8 4
링크 (link) 읽어오기 (2/3) 예제 (parse_link.php) $fp = fopen ( http://www.hani.co.kr/, r ) or die ( URL을열수없습니다. ); while ($str = fgets ($fp, 1024)) if (preg_match_all ( /<.*a.*href=.*>.*<\/.*a.*>/, $str, $url_str)) foreach ($url_str[0] as $match) print $match. <br> ; preg_match_all(string pattern, string subject, array matches): 스트링 subject 에서주어진 pattern 을모두찾아서배열 matches 에저장하는함수첫번째매치가배열 $matches[0] 에저장됨 (c.f., $matches[1] 에는서브패턴이저장됨 ) Page 9 링크 (link) 읽어오기 (3/3) 수행결과 Page 10 5
일반텍스트문서 HTML 문서 (1/6) 예상문제점 특수문자의처리 예를들어 < 와 > 사이에있는문자는 HTML 에서태그로인식 변환이필요 예제 (linkexample.php) grapes lemon <pear> mango <orange> apple $text_array = file ( example.txt ) foreach ($text_array as $line) print $line; Page 11 일반텍스트문서 HTML 문서 (2/6) 출력결과 <pear> 와 <orange> 가출력되지않았음 why? HTML 에서태그로인식되었음 Page 12 6
일반텍스트문서 HTML 문서 (3/6) HTML 에서는, HTML 태그나 엔터 문자를브라우저에서인식하지못함 이문제점을해결하기위해서는각문자를다른기호로나타내어야함 공백문자 < < (lt means less than ) > > (gt means greater than ) HTML 에서사용되는엔티티들을특수한문자로바꿀경우 htmlentities() 사용 (c.f., 유사한함수로 htmlspecialchars() 사용 ) Page 13 일반텍스트문서 HTML 문서 (4/6) htmlentities string htmlentities (string string [,int quote_style [,string charset]])) string: HTML 로변환하고자하는문자열 quote_style: 와 중어느것으로변환할것인지지정 charset: 문자열의문자집합 참조 : http://kr.php.net/manual/kr/function.htmlentities.php Page 14 7
일반텍스트문서 HTML 문서 (5/6) nl2br string nl2br (string string) 엔터 문자의변환 (new line( \n ) 을 <br> 로변환하는함수 ) 수정된예제 (linkexample2.php) $text_array = file ( example.txt ) foreach ($text_array as $line) print nl2br (htmlentities ($line)); file(): 파일전체를읽어서배열에저장하는함수 Page 15 일반텍스트문서 HTML 문서 (6/6) 수행결과 Page 16 8
HTML 문서 일반텍스트문서 (1/2) HTML 문서를일반문서로바꿀경우 HTML 문서의모든태그를삭제 <br> 을 엔터 로변환 HTML 태그를삭제하는방법 strip_tags() 함수를사용 <br> 을엔터문자로변환하는함수는없음 정규표현식이용하여변환 strip_tags: HTML 태그를제거함 (http://kr.php.net/manual/kr/function.strip-tags.php) string strip_tags (string str [, string allowable_tags]) Page 17 HTML 문서 일반텍스트문서 (2/2) 예제 (html2txt.php) $html_file = file ( htmlexample.html ); $fp = fopen ( destfile.txt, w ); <html> <body> grapes lemon pear<br> mango orange apple </body> </html> foreach ($html_file as $line) $line = eregi_replace ( <br>, \n, $line); $line = strip_tags ($line); fputs ($fp, $line); fclose ($fp); eregi_replace(): 주어진패턴을주어진스트링으로변환 ( 예 : <br> \n ) Page 18 9
Homework #10 ( 실습 #8) Page 19 10