ฉันรู้ว่านี่เป็นคำถามเก่า แต่ถ้าคุณต้องการแก้ไขเครื่องหมาย '&' ที่ผิดรูปแบบใน HTML ของคุณ คุณสามารถใช้รหัสที่คล้ายกับสิ่งนี้:
$page = file_get_contents('http://www.example.com');
$page = preg_replace('/\s+/', ' ', trim($page));
fixAmps($page, 0);
$dom->loadHTML($page);
function fixAmps(&$html, $offset) {
$positionAmp = strpos($html, '&', $offset);
$positionSemiColumn = strpos($html, ';', $positionAmp+1);
$string = substr($html, $positionAmp, $positionSemiColumn-$positionAmp+1);
if ($positionAmp !== false) {
if ($positionSemiColumn === false) {
$html = substr_replace($html, '&', $positionAmp, 1);
} else if (preg_match('/&(#[0-9]+|[A-Z|a-z|0-9]+);/', $string) === 0) {
$html = substr_replace($html, '&', $positionAmp, 1);
fixAmps($html, $positionAmp+5);
} else {
fixAmps($html, $positionAmp+1);
}
}
}