我在用这个
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);
当然,您可以对其进行调整以满足您的特定需求,但要保持简单,让它工作起来会容易得多。