Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用户输入到URL_Javascript_Html - Fatal编程技术网

Javascript 用户输入到URL

Javascript 用户输入到URL,javascript,html,Javascript,Html,我有一些url,我需要用input type=“text”中的用户输入替换其中的一些部分,并通过单击按钮移动到新链接 如何在URL中放置变量 //一些url/trends.cgi?createimage&t1=1412757517&t2=1412843917&AssumeInitialState=yes&assumestatesduringnotrunning=yes&InitialAssumeHostState=0&InitialAssumeServiceState=0&AssumeState

我有一些url,我需要用input type=“text”中的用户输入替换其中的一些部分,并通过单击按钮移动到新链接
如何在URL中放置变量

//一些url/trends.cgi?createimage&t1=1412757517&t2=1412843917&AssumeInitialState=yes&assumestatesduringnotrunning=yes&InitialAssumeHostState=0&InitialAssumeServiceState=0&AssumeStatesRetention=yes&includesoftstates=no&host=SCP-3&service=修改+时间+EDR+文件&backtrack=4&缩放=4

我有函数,但它将输入放在url的末尾

function redirect() {
    var baseUrl = 'http://google.com.ua/';

    document.myform.action=baseUrl + document.getElementById('url').value;
}

<form name="myform" method="post" onsubmit="redirect()">
    <input type="text" id="url">
    <input type="submit" value="submit">
</form>
函数重定向(){
var baseUrl=http://google.com.ua/';
document.myform.action=baseUrl+document.getElementById('url').value;
}

稍微玩一下JavaScript,我相信这可以解决您的问题:

var linktext=”http://site/some-url/trends.cgi?createimage&t1=1412757517&t2=1412843917&assumeinitialstates=yes&assumestatesduringnotrunning=yes&initialassumedhoststate=0&initialassumedservicestate=0&assumestateretention=yes&includesoftstates=no&host=SCP-3&服务=修改+时间+EDR+文件和回溯=4&缩放=4”;
//我们将使用内存中的“超链接”对象进行基本解析
var anchor=document.createElement(“A”);
anchor.href=linktext;
//查询字符串以?开头,我们将其删除。
//然后,将其拆分为&symbol
var queryvars=anchor.search.replace(/^\?/,'').split('&');
//现在循环查询字符串的所有部分,在表单key->value中创建一个对象
var querycontent={};
对于(i=0;i
您可以构建手动查询字符串解析器和构造函数,例如:

function parseQuery(qstr){
    var query = {};
    var a = qstr.split('&'); //take the passed query string and split it on &, creating an array of each value
    for (var i in a) { //iterate the array of values
        var b = a[i].split('='); //separate the key and value pair
        query[decodeURIComponent(b[0])] = decodeURIComponent(b[1]); //call decodeURIComponent to sanitize the query string
    }

    return query; //returned the parsed query string object
}

function buildQuery(obj){
    var str = [];
    for(var p in obj) //iterate the query object
       if (obj.hasOwnProperty(p)) { //check if the object has the propery name we're iterating
           str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); //push the encoded key value pair from the object into  the string array
       }
    return str.join("&"); //take the array of key value pairs and join them on &
} 
下面我们以您给出的字符串为例:

var $str = 'createimage&t1=1412757517&t2=1412843917&assumeinitialstates=yes&assumestatesduringnotrunning=yes&initialassumedhoststate=0&initialassumedservicestate=0&assumestateretention=yes&includesoftstates=no&host=SCP-3&service=MODIFICATION+TIME+EDR+FILES&backtrack=4&zoom=4';
现在我们在字符串上调用parseQuery函数

var obj = parseQuery($str);
然后,我们迭代从parseQuery函数生成的对象

Object.keys(obj).forEach(function(k, i) {
    switch(k){
        case 't1':
            obj[k] = 'replacedt1';
            break;
        case 'service':
            obj[k] = 'replacedServices';
            break;
        case 'host':
            obj[k] = 'replacedHost';
    }         
});
现在,
obj
变量具有新更新的值。我们可以通过传入对象,使用
buildQuery
函数重新生成查询

console.log(buildQuery(obj));
这将产生如下结果:

createimage=undefined&t1=replacedt1&t2=1412843917&assumeinitialstates=yes&assumestatesduringnotrunning=yes&initialassumedhoststate=0&initialassumedservicestate=0&assumestateretention=yes&includesoftstates=no&host=replacedHost&service=replacedServices&backtrack=4&zoom=4 

您可以使用新的
URL
对象(对于较旧的浏览器,有一个:


看起来OP想用JS而不是PHP来做这件事。(公平地说,问题似乎标记不好)这就是问题有错误标记时会发生的情况+在提交之前没有完成:-):露齿而笑:我只是编辑评论来承认标记不好-你打败了我。:)我可以在基本URL中插入变量吗?例如//some url/createimage&t1-$variable1/yes&initialassumedhoststate-$variable2(其中variable=my input)并重定向到新的url?现在请更新您的答案,因为您意识到这不是一个与PHP相关的问题。现在这有点让人困惑,因为答案是从PHP方法开始的。你的小提琴仍然有用,所以我觉得答案本身不应该被删除。“然后我们迭代对象…”这部分听起来有点奇怪。您只需执行以下操作:
obj.host=“replacedHost”
obj.service=“replacedService”
,等等。我可以在基本URL中插入变量吗?例如//some url/createimage&t1-$variable1/yes&initialassumedhoststate-$variable2(其中variable=my input)并重定向到新url?@dend
set
方法需要一个字符串,因此是的,您可以在其中插入或连接任何cariable。您能给我一些示例吗
createimage=undefined&t1=replacedt1&t2=1412843917&assumeinitialstates=yes&assumestatesduringnotrunning=yes&initialassumedhoststate=0&initialassumedservicestate=0&assumestateretention=yes&includesoftstates=no&host=replacedHost&service=replacedServices&backtrack=4&zoom=4 
var url = new URL("http://some-url/trends.cgi?createimage&t1=1412757517&t2=1412843917&assumeinitialstates=yes&assumestatesduringnotrunning=yes&initialassumedhoststate=0&initialassumedservicestate=0&assumestateretention=yes&includesoftstates=no&host=SCP-3&service=MODIFICATION+TIME+EDR+FILES&backtrack=4&zoom=4");
url.searchParams.set("t1", "someNewT1");
url.searchParams.set("t2", "someNewT2");
url.searchParams.set("host", "someNewHost");
url.searchParams.set("service", "someNewService");

alert(url.href);
/*
http://some-url/trends.cgi?host=someNewHost&assumestateretention=yes&initialassumedservicestate=0&t2=someNewT2&initialassumedhoststate=0&assumeinitialstates=yes&zoom=4&backtrack=4&createimage=&assumestatesduringnotrunning=yes&includesoftstates=no&service=someNewService&t1=someNewT1
*/