网站首页php
PHP实现JS中的encodeURIComponent
发布时间:2022-10-05 19:41:34编辑:slayer.hover阅读(154)
1. 前端将字符串使用js的encodeURIComponent编码后,后端拿到参数使用urlencode同样进行编码, 结果发现并不完全相同。
js code:
let str = "key=!(123 * 456)"; console.log(encodeURIComponent(str));
输出结果:key%3D!(123%20*%20456)
php code:
$str = "key=!(123 * 456)"; echo urlencode($str);
输出结果:key%3D%21%28123+%2A+456%29
2. 参照encodeURIComponent() 的说明:
encodeURIComponent() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( )
将上述被忽略的字符恢复, 除了上述四个字符,空格符“ ”被js的encodeURIComponent转为%20, 而php的urlencode是转成了+。
$rep = [ '%21' =>'!', '%2A' =>'*', '%28' =>'(', '%29' =>')', '+' =>'%20' ]; echo str_replace(array_keys($rep), array_values($rep), urlencode($str));
输出结果:key%3D!(123%20*%20456)
至此,PHP返回的结果与JS的一致了。
评论