Maison >développement back-end >tutoriel php >Méthode PHP pour résoudre le code tronqué du DOM

Méthode PHP pour résoudre le code tronqué du DOM

墨辰丷
墨辰丷original
2018-05-30 16:18:131445parcourir

J'ai récemment rencontré un problème au travail. Lors de l'utilisation de DOM, j'ai découvert le problème des caractères tronqués. Plus tard, je l'ai finalement résolu en recherchant des informations sur Internet. Je vais maintenant partager la solution avec tout le monde. référence, les amis dans le besoin peuvent venir apprendre ensemble.

Avant-propos

DOM est une classe de traitement XML et HTML relativement nouvelle en PHP. Elle peut exploiter l'arborescence DOM aussi facilement que Javascript. sur Internet Le but de cet article est de présenter son traitement XML. L'article d'aujourd'hui présentera la méthode PHP pour résoudre les caractères tronqués du DOM. Je n'entrerai pas dans les détails ci-dessous, mais regarderai simplement la solution ci-dessous.

La solution est la suivante

/**
 * 请求url页面信息
 * @param str $url
 * @return str mixed|boolean
 */
function curl_get($url) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  //302跳转
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0');
  curl_setopt($curl, CURLOPT_REFERER, $url);
  $data = curl_exec($curl);
  $code = curl_getinfo($curl,CURLINFO_HTTP_CODE); //输出请求状态码
  curl_close($curl);
  if(200 == $code) {
    //解决乱码
    if (preg_match(&#39;#<meta[^>]*charset="?gb2312"[^>]*>#&#39;, $data)) {
      $data = iconv("gb2312","utf-8//IGNORE",$data);
      $data = preg_replace(&#39;#<meta[^>]*charset="?gb2312"[^>]*>#is&#39;, &#39;<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">&#39;, $data);
    }

    if (!preg_match(&#39;#<meta charset="utf-8"[^>]*>#is&#39;, $data)) {
      $data = str_replace(&#39;<head>&#39;, &#39;<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">&#39;, $data);
    }

    if (preg_match(&#39;#<meta charset="utf-8"[^>]*>#is&#39;, $data)) {
      $data = preg_replace(&#39;#<meta charset="utf-8"[^>]*>#is&#39;, &#39;<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">&#39;, $data);
    }

    return $data;
  } else {
    return false;
  }

}

/**
 * 获取 DOMDocument 对象
 * @param str $url
 * @return boolean|DOM
 */
function getDom($url) {
  $html_content = curl_get($url);
  if(empty($html_content)) {
    //saveLog($url, &#39;请求失败&#39;);
    return false;
  }
  $dom = new DOMDocument(&#39;1.0&#39;, &#39;utf-8&#39;);
  libxml_use_internal_errors(true);
  $dom->loadHTML($html_content);
  return $dom;
}

$html_content = mb_convert_encoding($html_content, &#39;UTF-8&#39;, &#39;gb2312&#39;);

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.


Recommandations associées :

phpExemple détaillé de mise en œuvre de l'aperçu du téléchargement d'avatar

phpExplication détaillée de l'exemple d'aperçu de téléchargement d'avatar

Explication détaillée des fonctions de sérialisation et de désérialisation PHP avec images et texte

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn