网站首页php

PHP实现JS中的encodeURIComponent

发布时间:2022-10-05 19:41:34编辑:阅读(343)


    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的一致了。

评论