If I pass a string value containing ()
to the vars property in the <amp-analytics>
component, the string is truncated due to the regex in the getNameArgs_
string method.
Eg:
Passing the user agent from the request headers, renders as so:
"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"
}
but will be passed in the analytics requests as Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4)
This is because in encodeVars_
the raw value is passed to getNameArgs_
whose regex (([^(]*)(\([^)]*\))?
) matches (Mozilla/5.0
as first match and (Macintosh; Intel Mac OS X 10_10_4)
as second)
The data needs to match on AMP and on the main site - so even though I could use the Java URLEncoder (UTF-8), which would encode the brackets, the equivalent JS encodeURIComponent() does not encode brackets therefore I would need to convert back to . So the regex would still match on the equivalent encoding.
Using URLEncoder has this as the query param in the request (double encoding...):
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
compared to this in a normal GA request:
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
Even that exact string gets truncated to Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_4)
if pasted directly into the object...
Maybe I am doing something completely wrong?
This was a bug and was fixed in this pull request and will be released in version 1481838084444