+
110
-

回答

encodeURIComponent与rawurlencode主要区别在于单引号的处理:

JS的encodeURIComponent保留单引号不编码

PHP的rawurlencode会将单引号编码为%27

我们自定义js端的encodeURIComponent:

// 前端使用自定义编码函数
function phpUrlencode(str) {
  return encodeURIComponent(str)
    .replace(/'/g, '%27')  // 单引号转换为%27
    .replace(/!/g, '%21')
    .replace(/\(/g, '%28')
    .replace(/\)/g, '%29')
    .replace(/\*/g, '%2A');
}

完整的js与php代码一样的对比:

<?php
$string="s'f'd双方都()是对方是否";
?>
<script>

const param = phpUrlencode("<?=$string?>");
console.log(param);

// 前端使用自定义编码函数
function phpUrlencode(str) {
  return encodeURIComponent(str)
    .replace(/'/g, '%27')  // 单引号转换为%27
    .replace(/!/g, '%21')
    .replace(/\(/g, '%28')
    .replace(/\)/g, '%29')
    .replace(/\*/g, '%2A');
}

    
</script>
<?php


// PHP代码
$param = rawurlencode($string);
echo $param;

网友回复

我知道答案,我要回答