Php 获取html表数据时的特殊字符
我有一个PHP废弃脚本,它从另一个网站获取HTML表内容。脚本不会获取导致内容看起来未格式化的HTML特殊字符(标记) 如何修改以下代码以获取HTML特殊字符,包括所有标记 完整代码:Php 获取html表数据时的特殊字符,php,html,character,Php,Html,Character,我有一个PHP废弃脚本,它从另一个网站获取HTML表内容。脚本不会获取导致内容看起来未格式化的HTML特殊字符(标记) 如何修改以下代码以获取HTML特殊字符,包括所有标记 完整代码: <?php error_reporting(E_ERROR); set_time_limit(0); function createRSSFile($tag,$value,$data) { # this will return the each element with tag. $tag
<?php
error_reporting(E_ERROR);
set_time_limit(0);
function createRSSFile($tag,$value,$data)
{
# this will return the each element with tag.
$tag=strtolower(str_replace(" ","_",$tag));
$tag=strtolower(str_replace(":","",$tag));
$tag=strtolower(str_replace("&","and",$tag));
// $returnITEM = "<".$tag.">".htmlspecialchars(str_replace(" 00:00:00","",$value))."</".$tag.">";
$returnITEM = "<".$tag.">".htmlspecialchars(str_replace("â¢","<br/><br/> ",$value))."</".$tag.">";
return $returnITEM;
}
// function extraFields($data){
//print_r($data);
// $returnITEM = "<".strtolower(str_replace(" ","_",$data[18][0])).">".htmlspecialchars($data[18][1])."</".strtolower(str_replace(" ","_",$data[18][0])).">";
// $returnITEM = "<".strtolower(str_replace("&","or",$data[19][0])).">".htmlspecialchars($data[19][1])."</".strtolower(str_replace("&","or",$data[19][0])).">";
// $returnITEM .= "<".strtolower(str_replace(" ","_",$data[20][0])).">".htmlspecialchars($data[20][1])."</".strtolower(str_replace(" ","_",$data[20][0])).">";
// $returnITEM .= "<".strtolower(str_replace(" ","_",$data[22][0])).">".htmlspecialchars($data[23][0])."</".strtolower(str_replace(" ","_",$data[22][0])).">";
// $returnITEM .= "<".strtolower(str_replace(" ","_",$data[24][0])).">".htmlspecialchars($data[25][0])."</".strtolower(str_replace(" ","_",$data[24][0])).">";
// $returnITEM .= "<".strtolower(str_replace(" ","_",$data[26][0])).">".htmlspecialchars($data[26][1])."</".strtolower(str_replace(" ","_",$data[26][0])).">";
// preg_match('/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i',$data[25][0],$email);
// $email=$email[0];
// $returnITEM .= "<email>".$email."</email>";
// return $returnITEM;
// }
function fileRead(){
$filename = "count.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
return $contents;
}
function fileWrite ($val) {
$filename = 'count.txt';
$somecontent = $val;
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'w')) {
echo "Cannot open file ($filename)";
exit;
}
if (fwrite($handle, $somecontent) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
fclose($handle);
} else {
echo "The file $filename is not writable";
}
}
function fetchData($jobid) {
$html=file_get_contents('http://acbar.org/JobDetail.aspx?id='.$jobid);
$html=str_replace("<td></td>", "",$html);
$html=str_replace("<td style=\"font-size:8pt;font-weight:bold;\"></td>","<td style=\"font-size:8pt;font-weight:bold;\">Null</td>",$html);
$html=str_replace("<td style=\"font-size:8pt;font-weight:bold;\" colspan=\"2\" ></td>","<td style=\"font-size:8pt;font-weight:bold;\" colspan=\"2\" >Null</td>",$html);
$html=str_replace(" ", " ",$html);
$html=str_replace("", "<br>",$html);
$html=str_replace("<br>", "_br_",$html);
// $html=str_replace("\â\u","'",$html);
$dom = new DOMDocument;
$dom->loadHTML( $html );
//echo $dom->saveHTML();
//exit;
$rows = array();
foreach( $dom->getElementsByTagName( 'tr' ) as $tr ) {
$cells = array();
foreach( $tr->getElementsByTagName( 'td' ) as $td ) {
if(trim($td->nodeValue)!='')
$cells[] = str_replace("br","<br>",trim($td->nodeValue));
}
if(sizeof($cells)>0)
$rows[] = $cells;
}
for($i=0;$i<0;$i++)
array_shift ($rows);
// echo "<pre>"; print_r($rows); echo "</pre>";
// exit;
if($rows[0][1]=="")
return false;
else
return $rows;
}
// Lets build the page
$latestBuild = date("r");
// Lets define the the type of doc we're creating.
$createXML ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
$createXML .= "<rss version=\"0.92\">";
$createXML .= "<channel>
<title>Job List</title>
<link>http://acbar.org</link>
<description>Job List</description>
<lastBuildDate>$latestBuild</lastBuildDate>
<language>en</language>";
$startFrom=fileRead();
$startFrom=$startFrom+1;
$endWith=$startFrom+3;
for($jid=$startFrom;$jid<$endWith;$jid++) {
$data=fetchData($jid);
if(!$data)
break;
$srcurl='http://acbar.org/JobDetail.aspx?id='.$jid;
$createXML .= '<item><sourceurl>'.htmlspecialchars($srcurl).'</sourceurl>';
for($i=0;$i<23;$i++)
{
$tag=$data[$i][0];
$value=$data[$i][1];
$createXML .= createRSSFile($tag,$value,$data);
}
// $extra=extraFields($data);
// $createXML .= $extra;
$createXML .= "</item>";
// fileWrite($jid);
}
// preg_match('/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i',$data[26][1],$email);
// $email=$email[0];
header("content-type: text/xml");
echo $createXML .= "</channel></rss>";
?>
这对我很有用
函数fetchData($jobid){
$html=文件\u获取\u内容('http://acbar.org/JobDetail.aspx?id=“.$jobid);
$html=str_replace(“,”,$html);
$html=str_replace(“,”,$html);
$html=str\u replace(“
,”\br\u“,$html);
$dom=新的DOMDocument;
$html=mb_convert_编码($html,“html-ENTITIES”,“UTF-8”);
$dom->loadHTML($html);
$rows=array();
foreach($dom->getElementsByTagName('tr')作为$tr){
$cells=array();
foreach($tr->getElementsByTagName('td')作为$td){
如果(修剪($td->nodeValue)!='')
$cells[]=htmlspecialchars(trim($td->nodeValue));
}
如果(sizeof($cells)>0)
$rows[]=$cells;
}
//这将返回带有标记的每个元素。
foreach($ntag行){
$tag=strtolower(str_替换(“,”,$ntag[0]);
$tag=strtolower(str_replace(“:”,“,$tag));
$tag=strtolower(str_替换(“&”、“and”、$tag));
$returnITEM.=''.str_replace(''br_','
',htmlspecialchars(str_replace(''00:00:00','','',$ntag[1]))。'';
}
return$returnITEM;
}
回波数据(3350);
编辑。。。增加了$html=mb_convert_编码($html,“html-ENTITIES”,“UTF-8”)代码>谢谢@Mihai lorga,这对我来说什么都没有。我已经粘贴了上面的完整代码。将$startfrom
更改为3350
,我想您会得到响应,因为我不知道fileRead()
读取fileRead函数从位于同一目录中的count.txt文件读取作业id。脚本正在获取表中的所有单元格,但对于某些单元格,它返回
,但对于某些单元格,它不返回。我希望此脚本返回
标记。您可以在此处访问脚本并对其进行测试。并查看其源代码。此脚本从另一个网站返回rss标记中的数据。在一些标记中,此处返回
,但在一些类似的标记中,此处不返回
。请给我一个示例,一个作业id
function fetchData($jobid) {
$html=file_get_contents('http://acbar.org/JobDetail.aspx?id='.$jobid);
$html=str_replace("<td></td>", "",$html);
$html=str_replace(" ", " ",$html);
$html=str_replace("<br/>", "_br_",$html);
$dom = new DOMDocument;
$html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8");
$dom->loadHTML($html);
$rows = array();
foreach( $dom->getElementsByTagName( 'tr' ) as $tr ) {
$cells = array();
foreach( $tr->getElementsByTagName( 'td' ) as $td ) {
if(trim($td->nodeValue)!='')
$cells[] = htmlspecialchars(trim($td->nodeValue));
}
if(sizeof($cells)>0)
$rows[] = $cells;
}
// this will return the each element with tag.
foreach($rows as $ntag){
$tag = strtolower(str_replace(" ","_",$ntag[0]));
$tag = strtolower(str_replace(":","",$tag));
$tag = strtolower(str_replace("&","and",$tag));
$returnITEM .= "<".$tag.">".str_replace('_br_', '<br />', htmlspecialchars(str_replace(" 00:00:00","",$ntag[1])))."</".$tag.">";
}
return $returnITEM;
}
echo fetchData(3350);