Reputation: 37177
I am fetching some info via PHP from a webpage using simple_php_dom
and curl. The problem is that the page is not built correctly so the DOM object contains erroneous info.
How can I get the HTML file as a string in a PHP var so that I can run a regular expression through it?
Curl doesn't work as it is ignoring the bad part.
simple_html_dom.php
has the same issue.
wget
doesn't work since I don't have permissions for it on the server.
Upvotes: 6
Views: 5496
Reputation: 1069
I used cURL to get the file into a string (simple_html_dom::load_file just wraps file_get_contents) then using simple_html_dom load (from string) method to parse it. That works for some URL's but it is failing in this case when the URL has a parameter string. It is fetching the URL as if it had not a parameter string. I set an agent with curl to impersonate a browser but no dice.
Sorry this is not an answer really, but maybe using curl will work for some people for whom the fopen setting is a problem.
Upvotes: 0
Reputation: 342695
With curl you would want to make sure that you're setting the CURLOPT_RETURNTRANSFER parameter to ensure that the page is retrieved as a string, e.g.:
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
See http://www.php.net/manual/en/function.curl-setopt.php
Upvotes: 4
Reputation: 1599
file_get_contents — Reads entire file into a string
string file_get_contents (
string $filename [, int $flags= 0 [, resource $context [, int $offset= -1 [, int $maxlen= -1 ]]]]
)
from the manual:
This function is similar to file(), except that file_get_contents() returns the file in a string, starting at the specified offset up to maxlen bytes. On failure, file_get_contents() will return FALSE.
file_get_contents() is the preferred way to read the contents of a file into a string. It will use memory mapping techniques if supported by your OS to enhance performance.
And it works both with webpages and files. You can grab the HTML, just by using "http://whatever.com/page.html" as $filename.
Upvotes: 13