使用JavaScript编码URL参数名称吗?

时间:2019-12-04 14:21:28

标签: javascript php url encoding

问题:

如何使用JavaScript安全地编码URL参数,以便可以将其放入GET字符串中,而PHP $_REQUEST将具有相同的参数名称?

var param = 'name with space';
var value = 'value';

// 'index.php?name with space=value' --> invalid
var get_str0 = 'index.php?' + param + '=' + value;

// 'index.php?name%20with%20space=value' --> valid
// BUT PHP $_REQUEST will have this parameter: 'name_with_space'
// see: https://stackoverflow.com/a/68742/6411540
var get_str1 = 'index.php?' + encodeURIComponent(param) + '=' + encodeURIComponent(value);

我知道这个问题几乎与Encode URL in JavaScript?类似,但是我所能找到的一切都与参数的值有关,而不是参数名称本身。

为什么我需要这样的东西:

我在数据可视化网站上工作。所有数据集都存储在SQL数据库中。每个记录都有一些与之关联的标签。这些标签分为几类。

示例:

Records: 
  Name: 'Carrot',
  Tags: ['vegetable', 'Vitamin A', 'Biotin']
Groups: 
  'Vitamins': ['Vitamin A', 'Biotin']

网站为每个组创建一个<select>元素,所有链接标签均为<option>。 用户可以在select语句中选择多个选项,并可以将其与其他组合并。为了从Web服务器查询数据,我生成了一个参数值对列表。

示例:

www.website.com/index.php?Vitamins=Biotin&Food=vegetable

<select>语句是从数据库动态生成的,每个“组”或“标签”名称都可以包含空格,点,甚至可能包含特殊字符。

1 个答案:

答案 0 :(得分:0)

这是我现在使用的:我知道它并不完美,并且我还没有对其进行广泛的测试,但是现在它可以使用了。

JS方面:

var param_name  = encodeURIComponent(param_orig.replace(/ /g,"_"));

PHP方面:

$param_name = rawurlencode(str_replace(' ', '_', $param_orig));