PHP8.4に上げたら、DOMDocumentでルートレベルのDOMは一個しかないはずとか言う実装になったっぽくて、LIBXML_HTML_NOIMPLIEDオプションを指定して読み込ませたHTMLが、最初に見つけたルートレベル要素しか処理されなくなった。
仕方なく<hoge>で括って、<hoge><p>1</p><p>2</p></hoge>で読ませてsaveHTML($htmlDocument->querySelector('hoge > *'))したら、<p>1</p><p>2</p>が取り出せるのかと思ったら、それもルートレベルが複数になるので<p>1</p>しか返ってこなくて、結局全部取り出してstr_replaceで外側のタグを消すとか言う原始的な処理になった。
そして、今困っているのは<br>タグが<br></br>に書き換えられてしまうんだけど、再帰処理で何度か回していると、これが増殖して無限<br></br>編が始まってしまい、めっちゃ行間があく。なんでそこだけXMLみたいな処理するんだよ。というかPHP8.3の動作に戻してくれ~。いや、もしかしたらLIBXMLの動作なのかもしれんけど。
LLMに聞いてもDOMDocumentでしか使えないオプションを回答してきて、そのオプションはDom\HTMLDocument(PHP8.4からこっちが推奨になった)で使えねーと困ったが、他の解法として、これも<br></br>を<br>に置換するという原始的処理で対応できた。内部で無駄な書き換えが発生していて処理が無駄だなぁ。 #PHP
PHP8.3以前でDOMDocumentを使ってるときは大丈夫だったんだよな。そっちが壊れてたのかもしれんが。
思考の /dev/null
PHP8.3以前でDOMDocumentを使ってるときは大丈夫だったんだよな。そっちが壊れてたのかもしれんが。