0

JavaScript に問題があります。データベースからエンコードされた文字列を取得し、その JavaScript 配列を配置します。文字列に \\ が含まれており、文字列の長さを警告すると、文字列の長さがそれよりも大きくなっています。元の文字列を取得するにはどうすればよいですか? これは私のひもです

var a = "eir~FdezuOha@ha_@rPzjQbnChxI~_Gf}\\|aAfnu@exNjmm@ilDvi]~Ttnz@tmLlyg@vi@nj`@`vIlrZznB`d^dd@zsVbvFdia@~bK~yT~uQxsPpmA|wL_bD|cCwiEfaEil@d`s@keEzri@u`Erw~Am|Dp{x@qJjbfBx}AdyrDkPtme@tgClei@feAziLrwFhJl}Ax`LvwHz||@nmHtrp@hGnnc@_D~j}@a@hskA_GjfuAlj]t_`@`sTheWjs@h{\\|AbxOj}LnxK`fN|gXtyH~cBrvElnKhaPxk`@jxB~v\\tqK~lLuUvkh@kBz~|As@tyfCfCbck@dbJhfh@h_QprrAcaC|czAunHbsr@qkMpm`@osk@|opB}nPvjvAthDp_kBhQdvt@zyK`pdAjlIx|OdiJln_@ngKzzu@l`YtdeAlqQrjZfzc@|y\\v{`@zks@h_@xcWf_CjoaArzNrbkAbfNb~c@nsVzeYjlTno]|hJxzU|~AflJvyDncJpnJdkKabBn`ToeE|pYcr@thRqpAh{NraHvkKnfCv}Js`@pmRx}EroV`dItwQnpQlcM~jAzrGikJdaHujMjxJs`@bxQzsEjlKmyCnrJc|FzrXu`FzhJ`eE`|LvfD`}`@rrDrr_@diHbdQbaBzrRajAd`[rzL~rwAtfDbhTn|HvvKluRvqWjiNxjHnlE|@ppKpfJbtDroDth@vre@oFnxRigF|nO{bEbwRwpGhmLld@rrKxuCbbRbnKbhSnve@vrr@}sBxqs@f{AnwZvZh{a@qnGdnSa~AlrKfmLjhe@q|AfmOj|FvlYzvE|br@j{Axr_@hkFfre@jhIdrg@udJbuRknHpbBgzBpdFc~AhyJorBzaOu|AffTpzFnaLv_W`{d@lhPrfJvxEfnJ~`KvuJ`nE~bTgzGztVwf@vsHngJ`eI~vV`yFv`m@sgAhhGwcC~iHtiH`ed@ruUbtO`tYv~Vlf^hdHlq@bnFvqLxin@p|Rxp[rkWnyTzka@jtVfqLvtF|aa@vcF`|Erc@~cIp}MjyUzuC|{O`lGp~Qhn@|rc@~mS|eg@vtZzi_@hqL|uSpkOrqHldHhkHl|Kjk[bgLdxItqa@jtDjiPbbDhwQryQlou@beVh|LnrJw}@~yRdk`@hhsAf~RtwSnbRblZp|CtgZfs]radA~~Bf_[zvArjTrcFfjNtzb@xgWziUtsN|af@tp\\blEluFpuFmsDn|FaoCdwCqlB~hFb|D|nMthQl_FfvFsxA|tYl|AnwP_Fzca@zbApjr@x]xP"


alert(a.length) //length is 1279

$.ajax({
    cache : false,
    url : 'get_polylines.action',
    type : 'post',
    dataType : 'json',
    async : false,
    success : function(result) {
       var polyline = result.polyline;

       var arr = new Array();
       var k = 0;
       for ( var j = 0; j < polyline.length; j++) {
          arr [k] = polyline[j];
          k++;
       }
      for(var i=0; i<arr.length; i++){
        alert(arr[i].length); //length is 1284
       }
    },
    
});

この文字列を入力隠しフィールドに入れて値を取得すると、長さ1284も警告されます。

4

1 に答える 1

0

String.split()文字列をループする代わりに、配列を分割するために使用します。

var a = "eir~FdezuOha@ha_@rPzjQbnChxI~_Gf}\\|aAfnu@exNjmm@ilDvi]~Ttnz@tmLlyg@vi@nj`@`vIlrZznB`d^dd@zsVbvFdia@~bK~yT~uQxsPpmA|wL_bD|cCwiEfaEil@d`s@keEzri@u`Erw~Am|Dp{x@qJjbfBx}AdyrDkPtme@tgClei@feAziLrwFhJl}Ax`LvwHz||@nmHtrp@hGnnc@_D~j}@a@hskA_GjfuAlj]t_`@`sTheWjs@h{\\|AbxOj}LnxK`fN|gXtyH~cBrvElnKhaPxk`@jxB~v\\tqK~lLuUvkh@kBz~|As@tyfCfCbck@dbJhfh@h_QprrAcaC|czAunHbsr@qkMpm`@osk@|opB}nPvjvAthDp_kBhQdvt@zyK`pdAjlIx|OdiJln_@ngKzzu@l`YtdeAlqQrjZfzc@|y\\v{`@zks@h_@xcWf_CjoaArzNrbkAbfNb~c@nsVzeYjlTno]|hJxzU|~AflJvyDncJpnJdkKabBn`ToeE|pYcr@thRqpAh{NraHvkKnfCv}Js`@pmRx}EroV`dItwQnpQlcM~jAzrGikJdaHujMjxJs`@bxQzsEjlKmyCnrJc|FzrXu`FzhJ`eE`|LvfD`}`@rrDrr_@diHbdQbaBzrRajAd`[rzL~rwAtfDbhTn|HvvKluRvqWjiNxjHnlE|@ppKpfJbtDroDth@vre@oFnxRigF|nO{bEbwRwpGhmLld@rrKxuCbbRbnKbhSnve@vrr@}sBxqs@f{AnwZvZh{a@qnGdnSa~AlrKfmLjhe@q|AfmOj|FvlYzvE|br@j{Axr_@hkFfre@jhIdrg@udJbuRknHpbBgzBpdFc~AhyJorBzaOu|AffTpzFnaLv_W`{d@lhPrfJvxEfnJ~`KvuJ`nE~bTgzGztVwf@vsHngJ`eI~vV`yFv`m@sgAhhGwcC~iHtiH`ed@ruUbtO`tYv~Vlf^hdHlq@bnFvqLxin@p|Rxp[rkWnyTzka@jtVfqLvtF|aa@vcF`|Erc@~cIp}MjyUzuC|{O`lGp~Qhn@|rc@~mS|eg@vtZzi_@hqL|uSpkOrqHldHhkHl|Kjk[bgLdxItqa@jtDjiPbbDhwQryQlou@beVh|LnrJw}@~yRdk`@hhsAf~RtwSnbRblZp|CtgZfs]radA~~Bf_[zvArjTrcFfjNtzb@xgWziUtsN|af@tp\\blEluFpuFmsDn|FaoCdwCqlB~hFb|D|nMthQl_FfvFsxA|tYl|AnwP_Fzca@zbApjr@x]xP"
arr = a.replace(/\\/g,"\\\\").split("");
console.log(arr.length); //1284

したがって、ajax 呼び出しの「成功」ビットを次のように置き換えます。

success : function(result) {
   var polyline = result.polyline;

    var arr = polyline.replace(/\\/g,"\\\\").split("");
    var k = arr.length; //1284
}

異なる長さが出力される理由は"\"、文字列にバックスラッシュ ( ) 文字が含まれているためです。これらは通常、特殊文字をエスケープするために使用され、文字列から配列を構築する前にエスケープする必要があります。
置換は で行われ.replace(/\\/g,"\\\\")、単一のバックスラッシュ ( "\") はすべて二重 ( )に置き換えられます"\\"。これにより、実際には正しい長さ 1284 の配列が返されます。

console.log(arr);
==> [<...> "G", "f", "}", "\", "\", "|", "a", "A", <...>]
//Representing:
"Gf}\\|aA";
于 2012-11-29T09:04:05.940 に答える