gpt4 book ai didi

javascript - 从 Javascript 到 Perl 的 URI 转义/转义

转载 作者:行者123 更新时间:2023-11-28 19:21:33 26 4
gpt4 key购买 nike

我有一个 javascript 从用户输入中读取的 URL。这是 JavaScript 代码的一部分:

document.getElementById("Snd_Cont_AddrLnk_BG").value=encodeURI(document.getElementById("Con_AddresWeb_BG").value.toString());

然后我通过 CGI 将字符串的值发布到 Perl 脚本(这里是 Perl 代码的一部分):

#!/usr/bin/perl -w
##
##

use strict;
use CGI;
use CGI::Carp qw ( fatalsToBrowser );
use URI::Escape;

my $C_AddrLnk_BG=$query->param("Snd_Cont_AddrLnk_BG");

my $lst_upload_dir="../data";
my $lst_file_bg=$lst_upload_dir."/contacts_bg.js";

open(JSBG,">$lst_file_bg") || die "Failed to open $lst_file_bg\n";
printf JSBG "var GMapLink_bg=\"".uri_unescape($C_AddrLnk_BG)."\";\n";
close JSBG;
system("chmod 777 $lst_file_bg");

uri_unescape 中的某处出现问题:输入的原始字符串是:

https://www.google.bg/maps/place/42%C2%B044'15.0%22N+23%C2%B019'04.2%22E/@42.7368454,23.317962,16z/data=!4m2!3m1!1s0x0:0x0

javascriptencodeURI()之后的字符串是:

https://www.google.bg/maps/place/42%25C2%25B044'15.0%2522N+23%25C2%25B019'04.2%2522E/@42.7368454,23.317962,16z/data=!4m2!3m1!1s0x0:0x0

文件中打印的 perl uri_unescape() 之后的脚本是:

https://www.google.bg/maps/place/42%C2%B044'15.0%22N+23%C2%B019'04.2          0.000000E+00/@42.7368454,23.317962,16z/data=!4m2!3m1!1s0x0:0x0

我无法确定问题是出在转义还是打印上,但是这部分

%2522E

被解释为

      0.000000E+00

(有 10 个前导空格)。

谁能帮助我了解我做错了什么?

最佳答案

您的代码存在很多问题。

document.getElementById("Snd_Cont_AddrLnk_BG").value =
encodeURI(document.getElementById("Con_AddresWeb_BG").value.toString());

我不知道你什么时候想到encodeURI。您应该拥有以下内容:

document.getElementById("Snd_Cont_AddrLnk_BG").value =
document.getElementById("Con_AddresWeb_BG").value;

printf JSBG "var GMapLink_bg=\"".uri_unescape($C_AddrLnk_BG)."\";\n";

现在错误的 encodeURI 已被删除,uri_unescape 也需要删除。

此外,在文本周围添加引号并不总是使其成为有效的 JavaScript 文字。最简单的方法如下:

use JSON qw( );

my $json = JSON->new()->allow_nonref();
$json->encode($C_AddrLnk_BG)

该片段还滥用了printfprintf 接受一个格式参数,所以你想要

printf FH "%s", ...

或者简单地

print FH ...

所以你最终得到的是:

use JSON qw( );

my $json = JSON->new()->allow_nonref();
$json->encode($C_AddrLnk_BG)
print JSBG "var GMapLink_bg=" . $json->encode($C_AddrLnk_BG) ."\n";
<小时/>

关于javascript - 从 Javascript 到 Perl 的 URI 转义/转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com