Autor Zpráva
Re4DeR
Profil
Ahoj používáte někdo simplehtml? Můžete mi prosím pomoci s tímto problémem ?

Mám soubor test.html který vypadá takto:
<table class="test" border="0" cellpadding="0" cellspacing="0">
    <tr> 
        <td>
            <a target="_blank" href="http://seznam.cz/index.html" title="open link">
                <script language='Javascript'>document.write(unescape('%54%65%73%74%6F%76%61%63%69%20%74%65%78%74'));</script>
            </a>
        </td>
    </tr>
</table>

A potřebuji z toho získat href linku = "h t t p : / / seznam.cz/index.html" . To se mi bohužel nedaří. Ale pokud soubor načtu pres funkci file() tak se to načte.
Zkoušel jsem to i pomocí DOM, ale s tím jsem nikdy nepracoval a neumím s tím. Chybí mi zde není něco jako innerHTML

Soubor kterým to zkouším získat:
<?php
require 'simple_html_dom.php';


echo "Toto vrací načítání přes php funkci file:<br>";
echo "----------------------------------------------------------<br>";
$lines = file('test.html');
foreach ($lines as $line_num => $line) {
    echo htmlspecialchars($line) . "<br>\n";
}
echo "----------------------------------------------------------<br>";
echo "<br><br><br>";
echo "Toto vrací načítání přes knihovnu SIMPLE HTML (chybějící href):<br>";
echo "----------------------------------------------------------<br>";
$html = file_get_html("test.html");
foreach($html->find('table.test') as $prvek) {
    echo htmlspecialchars($prvek);
}
echo "<br>----------------------------------------------------------<br>";
echo "<br><br><br>";
echo "Toto vrací načítání přes php dom (chybějící href):<br>";
echo "----------------------------------------------------------<br>";
$s = file_get_contents('test.html');
$dom = new DOMDocument();
$ok = $dom->loadHTML($s);

$table = $dom->getElementsByTagName('table');
foreach ($table as $tag) {
    echo htmlspecialchars($tag->nodeValue);

}
echo "<br>----------------------------------------------------------<br>";
echo "<br><br><br>";
echo "Toto vrací načítání přes php dom xpath (chybějící href):<br>";
echo "----------------------------------------------------------<br>";
$xpath = new DOMXPath($dom);
$link = $xpath->query('//table/tr/td')->item(0)->nodeValue;
echo $link;
echo "<br>----------------------------------------------------------<br>";
?>

a výsledek co mi to vyplivne:
Toto vrací načítání přes php funkci file:
----------------------------------------------------------
<table class="test" border="0" cellpadding="0" cellspacing="0"> 
<tr> 
<td> 
<a target="_blank" href="http://seznam.cz/index.html" title="open link"> 
<script language='Javascript'>document.write(unescape('%54%65%73%74%6F%76%61%63%69%20%74%65%78%74'));</script> 
</a> 
</td> 
</tr> 
</table>
----------------------------------------------------------



Toto vrací načítání přes knihovnu SIMPLE HTML (chybějící href):
----------------------------------------------------------
<table class="test" > <tr> <td> <a target="_blank" > <script language='Javascript' >document.write(unescape('%54%65%73%74%6F%76%61%63%69%20%74%65%78%74'));</script> </a> </td> </tr> </table>
----------------------------------------------------------



Toto vrací načítání přes php dom (chybějící href):
----------------------------------------------------------
document.write(unescape('%54%65%73%74%6F%76%61%63%69%20%74%65%78%74')); 
----------------------------------------------------------



Toto vrací načítání přes php dom xpath (chybějící href):
----------------------------------------------------------
document.write(unescape('%54%65%73%74%6F%76%61%63%69%20%74%65%78%74')); 
----------------------------------------------------------

Nejlepší řešení by asi bylo přes simplehtml. Nevíte jak z toho ten href dostat? Děkuji za pomoc
peta
Profil
google = php parse html
Naslo mi to class: http://simplehtmldom.sourceforge.net/
dokumentace: http://simplehtmldom.sourceforge.net/manual.htm
download: http://sourceforge.net/projects/simplehtmldom/files/

Nebo priklad na parsovani XML pro pocasi
<?php
//http://www.google.com/ig/api?weather=opava,cz
//http://www.exorithm.com/algorithm/view/weather_forecast

function att($att,$type,$row=0)
{
global $xml;
switch ($type)
  {
  case 1 : return $xml->weather->current_conditions->{$att}['data'];
  case 2 : return $xml->weather->forecast_conditions->$row->{$att}['data'];
  default: return $xml->weather->forecast_information->{$att}['data'];
  }
}

function img($url,$width=35,$title)
{
//return '<img src="http://www.google.com/'.$url.'"/>';
$name   = substr($url,strrpos($url,'/')+1,-4);
$images = array(
'cloudy'         => 'cloudy',
'mostly_cloudy'  => 'partly_cloudy',
'mostly_sunny'   => 'partly_cloudy',
'chance_of_rain' => 'light_rain',
'chance_of_storm'=> 'tstorms',
'mist'           => 'light_rain',
'sunny'          => 'sun',
'chance_of_snow' => 'light_snow',
'flurries'       => 'light_snow'
);
$name = isset($images[$name]) ? $images[$name] : $name;
$name = $name.'.png';
$url_folder = $width==60 || $width==35 ? $width : 35;
return '<img src="http://ssl.gstatic.com/onebox/weather/'.$url_folder.'/'.$name.'" alt="'.$name.'" width="'.$width.'" title="'.$title.'">';
}



header('content-type: text/html; charset: utf-8');
$data  = file_get_contents('http://www.google.com/ig/api?weather=opava,cz&hl=cs');
$data  = iconv("iso-8859-2", "UTF-8", $data );
$xml   = simplexml_load_string($data);
$loc   = str_replace(',',', ',att('city',0));
$date  = att('forecast_date',0);
$t     = '&deg;C';
$html  = '
<html>
<head>
<title>Počasí</title>
<style type="text/css">
html, body {margin:0;padding:0;}
.f1, .f2 {border-collapse:collapse; border-spacing:0;}
.f1 caption {font-weight:bold;text-align:left;}
.f1 caption:first-letter {text-transform:uppercase;}
.f2 {color:#666;}
.f1 .temp {font-size:125%;}
.f2 .temp {font-size:85%;}
</style>
</head>
<body>
';

$html .= "
<table class=\"f1\" summary=\"Aktuální počasí pro ".$loc."\">
  <caption>".$loc."</caption>
  <tr>
    <td width=\"35\">".img(att('icon',1),35,att('condition',1))."</td>
    <td><div class=\"temp\">".att('temp_c',1).$t."</div></td>
  </tr>
  <tr>
    <td colspan=\"2\">
      <div class=\"wind\">".preg_replace('/\ss.*?rychlostí/',',',att('wind_condition',1))."</div>
      <div class=\"hum\">" .att('humidity',1)."</div>
    </td>
  </tr>
</table>";

$html .= "
<table class=\"f2\" summary=\"Předpověď počasí\">";
for ($i=0;$i<4;$i++)
  {
  $html .= "
  <tr>
    <td>".img(att('icon',2,$i),16,att('condition',2,$i))."</td>
    <td><div class=\"temp\">".att('high',2,$i).$t.', '.att('low',2,$i).$t."</div></td>
    <td>&nbsp;".att('day_of_week',2,$i)."</td>
  </tr>";
  }
$html .= "
</table>
</body>
</html>
";
echo $html;
?>
Re4DeR
Profil
Asi jsi nečetl co jsem psal. Ale děkuji. Už jsem to vyřešil.
Stáhl jsem soubor pomoci file_get_content , nasel a odstranil ten javascript a pak teprve na to pustil simplehtml

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: