AMP-analytics: 由于 getNameArgs 方法,传递的用户代理被截断

AMP-analytics: Passing useragent is truncated due to getNameArgs method

如果我将包含 () 的字符串值传递给 <amp-analytics> 组件中的变量 属性,由于 regex 中的 regex 字符串被截断14=] 字符串方法。

例如:

从请求 headers 传递用户代理,呈现如下:

"vars": {
     "userAgentHeader": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
}

但将作为 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4)

在分析请求中传递

这是因为在 encodeVars_ the raw value is passed to getNameArgs_ 中,其正则表达式 (([^(]*)(\([^)]*\))?) 匹配(Mozilla/5.0 作为第一个匹配项,(Macintosh; Intel Mac OS X 10_10_4) 作为第二个匹配项)

数据需要在 AMP 和主站点上匹配 - 所以即使我可以使用 Java URLEncoder (UTF-8),它将对括号进行编码,等效的 JS encodeURIComponent() 不编码括号 因此我需要转换回 .所以正则表达式仍然会匹配等效的编码。

使用 URLEncoder 将此作为请求中的查询参数(双重编码...):

Mozilla%252F5.0%2B%2528Macintosh%253B%2BIntel%2BMac%2BOS%2BX%2B10_10_4%2529%2BAppleWebKit%252F537.36%2B%2528KHTML%252C%2Blike%2BGecko%2529%2BChrome%252F53.0.2785.116%2BSafari%252F537.36

与普通 GA 请求相比:

Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_4)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F53.0.2785.116%20Safari%2F537.36

如果直接粘贴到 object...

,即使那个确切的字符串也会被截断为 Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_4)

也许我做错了什么?

这似乎是一个错误。请在以下网址提交错误报告:https://github.com/ampproject/amphtml/issues/new

这是一个错误,已在此 pull request 中修复,将在 1481838084444

版本中发布