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 回答