繁体   English   中英

HTTP标头内容类型的匹配字符集

[英]Matching charset of HTTP Header Content-Type

在JavaScript中,我想获取HTTP标头字段名称“ Content-Type”的“ charset”属性

到目前为止,我所见过的Regex类似于:

var charset = (/^charset=(.+)/im).exec(ContentType)[1];

ContentType一起包含Content-Type HTTP标头的信息。

但在我的测试中,匹配结果为“空”

编辑:跟随对@andris leduskrasts的回复,我这样做

var ctype = 'text/html; charset=utf-8';
var charset = new RegExp('charset=.*?(?=$|\s|\;|\")').exec(ctype);
system.stdout.writeLine(charset);

我得到'charset = utf-8'。 但是有些想法只能得到'utf-8'。

如果您满意“ charset= ”部分作为结果的一部分,则可以这样做:

charset=.*?(?=\\s|\\;|\\|$")

<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">导致charset=ISO-8859-1

如果您想摆脱正则表达式中已经存在的“ charset= ”部分,这会有些棘手,因为javascript不支持lookbehinds。

编辑:

如果只需要UTF-8部分,则只要变量始终是内容类型,因此很容易做到,因此,它以实际字符集结尾。 在这种情况下: [^\\s\\;\\=]*?(?=$) ; 这实际上只是选择字符串的最后一个单词,在空格,分号和a = 这绝对不是一个在随机字符串中查找字符集的好方法,但是对于您的特定情况它可能会成功。

这个Javascript库,做好了!

content-type :根据RFC 7231创建和解析HTTP Content-Type标头

var contentType = require('content-type')
var obj = contentType.parse('image/svg+xml; charset=utf-8')

解析内容类型字符串。 这将返回具有以下属性的对象(示例显示了字符串' image/svg+xml; charset=utf-8 '):

  • type :媒体类型(类型和子类型,始终为小写)。 示例:“ image / svg + xml”
  • parameters :媒体类型中parameters的对象(参数名称始终为小写)。 范例: {charset: 'utf-8'}

如果字符串丢失或无效,则引发TypeError

我只是遇到了同样的问题。

如果您只需要从任意内容类型标头中提取字符集值(根据rfc1341允许在字符集赋值后输入字符),则可以使用以下JS regexp:

var re = /charset=([^()<>@,;:\"/[\]?.=\s]*)/i;

之所以可行,是因为匹配的组从=之后开始,并且排除了链接中给定的字符集规范的可能结尾; ()<>@,;:\\"/[]?.= ,空格和(隐式)字符串结尾。

由于字符集是可选的,因此您可以使用以下内容设置适当的值:

var charset = re.test(ctype) ? re.exec(ctype)[1] : 'utf8';

或其他一些默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM