更新 2024.1.11 13:50閲覧 661

【PHP】CURLで表示が崩れるのはNULLとBOMの所為

問題点

  • NULL: タグ構成記号の右側部分である > の直後にヌル文字が含まれると、それ以降の文字が消える。
  • BOM: HEAD タグが消え、BODY タグ内に空の P タグが出現。それに続いて HEAD と BODY 内の要素が出力される。

環境 Docker の Lapi で入れたやつ

PHP Version8.3.1
cURL Information7.88.1
DOM/XML API Version20031129
libxml Version2.9.14

問題のコード

<?php
libxml_use_internal_errors(true);
$url = 'https://garihari.sakura.ne.jp/NULL.html';
#$url = 'https://garihari.sakura.ne.jp/BOM.html';
#$url = 'https://services.digital.go.jp/mynaportal/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, getenv('HTTP_USER_AGENT'));
$curl = curl_exec($ch);
$curl = mb_encode_numericentity($curl, [0x81, ~0, 0, ~0], mb_detect_encoding($curl, 'euc-jp, shift-jis, auto'));
$dom = new DOMDocument();
$dom->loadHTML($curl);
echo $dom->saveHTML($dom->documentElement);

追加すべきコード

$curl = str_replace(["&#65279;", "\0"], '', $curl);

コメント

当フォームより収集される個人情報は、返信を要する際に使用されるものであり、法令に基づく行政機関等への提供を除き、ご本人の同意を得ずに第三者に提供することはありません。また、コメントが掲載される場合であってもメールアドレスが本サイト内に記載されることはありません。