0

私はこれを使っています

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">

何か案は?

4

2 に答える 2

1

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);
于 2012-05-06T08:08:25.250 に答える
1

文字セットを取得することのみに関心がある場合は、次のようなより単純なものを使用しないでください:

preg_match('/charset=([^"]+)/i', $html, $match);

もちろん、特定のニーズに合わせて微調整することもできますが、シンプルにしておけば、はるかに簡単に機能させることができます。

于 2012-05-06T08:12:23.337 に答える