私はこれを使っています
preg_match('/<meta\s+http-equiv="Content-Type" content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match)
文字セットを取得しますが、これでは機能しません
<META http-equiv=Content-Type content="text/html; charset=windows-1256">
何か案は?
私はこれを使っています
preg_match('/<meta\s+http-equiv="Content-Type" content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match)
文字セットを取得しますが、これでは機能しません
<META http-equiv=Content-Type content="text/html; charset=windows-1256">
何か案は?
preg_match()には二重引用符がありますが、html の例にはありません。
ここに: http-equiv=Content-Type
ここで preg_match() が引用符の有無にかかわらず機能するようにサポートする場合は、コードを次のように単純に変更します。
preg_match('/<meta\s+http-equiv=(")?Content-Type(")?\s+content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match);
属性の順序が変更されたときに機能するより良いバージョン:
preg_match('/<meta.+?content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match);
文字セットを取得することのみに関心がある場合は、次のようなより単純なものを使用しないでください:
preg_match('/charset=([^"]+)/i', $html, $match);
もちろん、特定のニーズに合わせて微調整することもできますが、シンプルにしておけば、はるかに簡単に機能させることができます。