我正在使用这个
preg_match('/<meta\s+http-equiv="Content-Type" content="([^;]+)(?:;\s*charset=["]?([^"^\s]*))?"/i', $html, $match)
获取 charset ,但这不适用于此
<META http-equiv=Content-Type content="text/html; charset=windows-1256">
任何想法?
答案 0 :(得分:1)
您在preg_match()中有双引号但在html示例中没有。
此处: http-equiv =内容类型
如果您想支持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);
答案 1 :(得分:1)
如果你只对获取字符集感兴趣,为什么不使用更简单的东西:
preg_match('/charset=([^"]+)/i', $html, $match);
当然,你可以调整它以满足你的特定需求,但要保持简单,让它更容易上班。