PDA

View Full Version : Lấy content từ trang khác bằng hàm PHP ?



hoangthienphuc
10-08-2007, 14:35
Mình gặp vấn đề trong lúc lấy content từ trang khác bằng hàm file_get_content
Sau khi đã lấy về nội dung mình xử lí substr để cắt và bóc về phần nội dung cần thiết nhưng mình cảm thấy không được tối ưu cho lắm vì nếu trang người ta update content = database thì nội dung đem về trang mình sẽ bị thừa đi hoặc thiếu và hàm substr( do cắt string 1 cách cố định) sẽ cắt bậy bạ làm xấu trang web thậm chí làm bể layout. Các bạn có cách giải pháp nào không ạ thay vì dùng hàm subsrt?

fanitvn
10-08-2007, 17:39
dùng substr là chuẩn rùi, chủ yếu cậu phải xác định chỉ số đầu chỉ số cuối chính xác thì sẽ được kết quả như ýe muốn thôi!

anhtuannd
10-08-2007, 20:43
Tớ hay dùng Regular Expression cho tiện. Dùng Substr đếm string vỡ mặt.

hoangthienphuc
11-08-2007, 06:33
To anhtuannd: đúng như anhtuannd nói, regular expression tiện lơi hơn trong trường hợp của mình nhưng dùng hàm nào trong regular expression? Do mình mới học PHP nên chưa có kinh nghiệm trong các vấn đề như thế này.
Gợi ý giúp mình nhé!

fanitvn
11-08-2007, 09:33
dùng kiểu như thế này hả:
preg_match("/(<td class=\"text\" valign=\"top\">(.*?)<\/td>)/",$content,$c);

-> $content là string
->trả lại kết quả vào $c -> c sẽ là 1 mảng. Print_r($c) ra để chọn 1 kết quả mong muốn, thường là $c[1] sẽ lấy đoạn giữa.

có thể dùng nhiều chỉ số 1 lúc ví dụ:
preg_match("/(href=\"(.*?)\"(.*?)>(.*?)<\/a>)/",$data,$t);
hoặc có thể dùng preg_match_all để lấy tất cả dữ liệu vào mảng, bác cứ print kết quả ra rùi chọn cái nào như ý.
Tham khảo php.net!

hoangthienphuc
17-08-2007, 08:36
Mình lại gặp rắc rối như thế này :
Mình có 1 đống mã HTML nhưng mình chỉ trích ra đoạn cần lấy gần nhất:
<tr>
<td colspan="4">
<p align="center">
<img src="chart10.chart?no_cache=5608" %></td>
</tr>
và dùng 1 biến $content để lưu đoạn code trên vào,
mình sử dụng hàm preg_match_all để lấy đoạn chứa tag img ra:
preg_match_all("/(<td colspan=\"4\">(.*?)<\/td>)/",$content, $match);
và sau đó print_r($match) ra, nhưng kết quả chỉ hiển thị :
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) )
không biết regular pattern trên của mình có sai gì kô? Các bạn giúp mình với !

pitagoever
17-08-2007, 13:17
hehe viết như vậy thì nó ko ra là phải, bạn dùng cặp dấu ngoặc đơn làm gì
preg_match_all("/(<td colspan=\"4\">(.*?)<\/td>)/",$content, $match);
sửa lại là
preg_match_all("/<td colspan=\"4\">(.*?)<\/td>/",$content, $match);
và tốt hơn là
preg_match_all('@<td colspan="4">(.*?)</td>@',$content, $match,PREG_SET_ORDER);

phải nắm vững mấy cái hàm này đã
http://quanphp.net/forum/viewtopic.php?t=21

nguyenthanhhuy19
18-08-2007, 22:15
nếu bạn chưa biết dùng preg thì sử dụng thuật toán đơn giản hơn vậy

<?
$content = get_file.....();
$start = strpos($content, '<tr>');
$end = strpos($content, '</tr>', $start) + 5;

$string = substr($content, $start, $end - $start);
?>