在JavaScript中使用PHP中的urlencode()?

iecba09b  于 2023-03-28  发布在  PHP
关注(0)|答案(6)|浏览(181)

我正在寻找类似的功能urlencode()从PHP只是在JavaScript。jQuery库是允许的。
基本上,我需要对字符串进行编码,然后使用JavaScript将用户重定向到另一个页面。

n1bvdmb6

n1bvdmb61#

出发地:https://www.php.net/manual/en/function.urlencode.php
返回一个字符串,其中除-_.外的所有非字母数字字符都已替换为百分比(%)符号,后跟两个十六进制数字和空格,编码为加号(+)符号。它的编码方式与来自WWW表单的发布数据的编码方式相同,这与application/x-www-form-urlencoded媒体类型中的方式相同。这与» RFC 3986编码不同(参见rawurlencode()),因为历史原因,空格被编码为加号(+)
From:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
encodeURIComponent()转义所有字符,除了:
未逃脱:A-Z a-z 0-9 - _ .!~ * '()
在该页面的底部附近提供了一个片段,看起来像这样:

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

我稍微调整了提供的javascript片段,以包含更多的字符。
我的代码:

function urlEncodeLikePHP(str) {
    return encodeURIComponent(str).replace(/[.!~*'()]/g, function(c) {
        return '%' + c.charCodeAt(0).toString(16);
    });
}

使用方法:

urlEncodeLikePHP("._!_~_*_'_(_)-\\-&-|-/");
// effectively: "._!_~_*_'_(_)-\-&-|-/"

编码输出:

%2e_%21_%7e_%2a_%27_%28_%29-%5C-%26-%7C
pdkcd3nj

pdkcd3nj3#

试试http://locutus.io/php/url/urlencode/中的urlencode,我已经在几个案例中测试过了,效果很好。

ewm0tg9j

ewm0tg9j4#

没有一个函数与urlencode()非常匹配,但有一个函数与rawurlencode()非常等效:encodeURIComponent() .
用法:var encoded = encodeURIComponent(str);
你可以在这里找到一个参考:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent

zc0qhyus

zc0qhyus5#

我的代码是等效于PHP的urlencode的JS函数(基于PHP的源代码)。

function urlencode(str) {
  let newStr = '';
  const len = str.length;

  for (let i = 0; i < len; i++) {
    let c = str.charAt(i);
    let code = str.charCodeAt(i);

    // Spaces
    if (c === ' ') {
      newStr += '+';
    }
    // Non-alphanumeric characters except "-", "_", and "."
    else if ((code < 48 && code !== 45 && code !== 46) ||
             (code < 65 && code > 57) ||
             (code > 90 && code < 97 && code !== 95) ||
             (code > 122)) {
      newStr += '%' + code.toString(16);
    }
    // Alphanumeric characters
    else {
      newStr += c;
    }
  }

  return newStr;
}

JS函数相当于PHP的urldecode。

function urldecode(str) {
  let newStr = '';
  const len = str.length;

  for (let i = 0; i < len; i++) {
    let c = str.charAt(i);

    if (c === '+') {
      newStr += ' ';
    }
    else if (c === '%') {
      const hex = str.substr(i + 1, 2);
      const code = parseInt(hex, 16);
      newStr += String.fromCharCode(code);
      i += 2;
    }
    else {
      newStr += c;
    }
  }

  return newStr;
}
juud5qan

juud5qan6#

如果phpjs.org你正在寻找一个与PHP等价的JS函数,请访问www.example.com:
http://phpjs.org/functions/urlencode:573
这里可以使用encodeURIComponent()(经过一些修改)。

相关问题