Javascript 如何确保Google Analytics自定义变量不会太长

Javascript 如何确保Google Analytics自定义变量不会太长,javascript,google-analytics,Javascript,Google Analytics,根据: 任何自定义变量名称和值的总组合长度可以是 不超过64字节。请记住,这并不等于64 人物。因为名称和值在存储时是URI编码的,所以有些 字符使用多个字节。例如,=存储为%3D 而不是=并使用3个字节而不是1个字节。获取URI的列表 编码值,在web上搜索URL编码引用 关于这一点,我有两个问题: 这64个字节中是否应包含编码的等号(=) 我尝试创建一个函数,确保自定义名称和值不会太长。 可以改进吗?(当然可以。) 函数truncateCustomVarAndSet(索引、名称、值、范围){

根据:

任何自定义变量名称和值的总组合长度可以是 不超过64字节。请记住,这并不等于64 人物。因为名称和值在存储时是URI编码的,所以有些 字符使用多个字节。例如,=存储为%3D 而不是=并使用3个字节而不是1个字节。获取URI的列表 编码值,在web上搜索URL编码引用

关于这一点,我有两个问题:

  • 这64个字节中是否应包含编码的等号(=)
  • 我尝试创建一个函数,确保自定义名称和值不会太长。 可以改进吗?(当然可以。)

    函数truncateCustomVarAndSet(索引、名称、值、范围){
    var keyValuePair,
    编码空气,
    lengthOK=假;
    而(!lengthOK&&value.length>0){
    keyValuePair=name+'='+值;
    encodedPair=encodeURIComponent(keyValuePair);
    
    lengthOK=encodedPair.length我已经测试了将64个字符的自定义变量组合在一起,看起来64只是键和值的编码字节,而不是任何连接字符的编码字节

    您应该使用
    encodeURIComponent
    ,因为

    另外,不要忘记
    \u gaq
    \u gaq
    前面的下划线需要是一个全局变量,因此无需将其作为参数传递

    看起来你的一般方法是有效的,并且避免了在编码字符中间错误地裁剪字符串的问题(正如我以前的方法错误地)。 下面是您的代码精简版(减少约220个字符):

    用这个测试:

    truncateCustomVarAndSet(3,"34567890345678903=1=1=456789034567895678904567890","211222$#!#11221122112122112eeeqeqqeqefo1op2k1po12kop21pok2p1o",1)
    _gaq.push(["_trackPageview"]);
    
    记录如下:

    自定义变量3
    标签:'34567890345678904567890'
    价值:“211222美元”
    范围:“1”

  • 从描述来看,“=”似乎不应该被算作集合的一部分,只有当键或值具有等于时

  • 我把你的功能减少了一点


  • 我故意不按你的方式做,因为我害怕把编码的值加在一个编码字符的中间,这样就不可能解码。你是说这是不可能发生的吗?我会用<代码> EnCODE URICCOMPONTRON/<代码>,谢谢!在子串和子串上,你能详细阐述吗?(由于在合理的搜索中找不到对此有任何具体信息)?下面是一个关于您的方法存在的问题的示例:如果我将名称设置为
    “fooz”
    并将值设置为
    “a,%%%%%%%%%%%%%%%%%
    Firefox/Firebug告诉我:“URIError:URI序列格式错误”我以前对代码中某个问题的评论现在无效了,因为@yahelc已经更新了答案。我向你更简单的解决方案致敬。少即是多。有人?有一段时间有一个答案,但我想作者删除了它。我记得答案中有一部分很有用!我应该使用encodeURIComponent,而不是encodeURI。我会更新我的question。答案中消失的另一件事是:它规定64个字节中应该包含等号,因此只有61个字节可用。我的答案有致命的缺陷,所以我删除了它。我在想这里的正确方法是什么,但是,切换到
    encodeURIComponent
    是我唯一看起来正确的见解:)根据规定,限制已增加到128个字符。有趣的是,措辞是“字符”而不是以前文档中的“字节”。您的解决方案比我的简单得多,@yahelc的+1也是如此。
    function truncateCustomVarAndSet(index, name, value, scope) {
        while (value.length && encodeURIComponent(name + value).length > 64) {
                value = value.substring(0, value.length-1);
        } 
        _gaq.push(['_setCustomVar', index, name, value, scope]);        
    } 
    
    truncateCustomVarAndSet(3,"34567890345678903=1=1=456789034567895678904567890","211222$#!#11221122112122112eeeqeqqeqefo1op2k1po12kop21pok2p1o",1)
    _gaq.push(["_trackPageview"]);
    
    function truncateCustomVarAndSet(index, name, value, scope) {
        var n = encodeURIComponent(name)
            ,v = encodeURIComponent(value)
        for(;(n + v).length > 64; v=encodeURIComponent(value=value.substr(1-value.length)));
        _gaq.push(['_setCustomVar', index, name, value, scope]);        
    }