php 实现escape加密

在 PHP 中实现类似 JavaScript 的 escape() 函数加密,可以通过自定义函数对字符串进行编码处理。以下是实现方法和注意事项:
实现 escape 加密函数
function escape($str) {
$len = strlen($str);
$result = '';
for ($i = 0; $i < $len; $i++) {
$char = $str[$i];
$ord = ord($char);
if ($ord >= 65 && $ord <= 90 || $ord >= 97 && $ord <= 122 || $ord >= 48 && $ord <= 57 || strpos('@*-_+.', $char) !== false) {
$result .= $char;
} else if ($ord < 256) {
$result .= '%' . strtoupper(dechex($ord));
} else {
$result .= '%u' . strtoupper(dechex($ord));
}
}
return $result;
}
实现 unescape 解密函数
function unescape($str) {
$result = '';
$i = 0;
$len = strlen($str);
while ($i < $len) {
if ($str[$i] == '%' && $str[$i + 1] == 'u') {
$hex = substr($str, $i + 2, 4);
$result .= mb_convert_encoding(pack('H*', $hex), 'UTF-8', 'UCS-2BE');
$i += 6;
} elseif ($str[$i] == '%') {
$hex = substr($str, $i + 1, 2);
$result .= chr(hexdec($hex));
$i += 3;
} else {
$result .= $str[$i];
$i++;
}
}
return $result;
}
使用示例
$original = "Hello 世界!";
$escaped = escape($original);
echo "加密后: " . $escaped . "\n";
$unescaped = unescape($escaped);
echo "解密后: " . $unescaped . "\n";
注意事项
- 该实现模拟了 JavaScript 的
escape()函数行为,但注意escape()已在 JavaScript 中被废弃,推荐使用encodeURIComponent()。 - 对于多字节字符(如中文),会转换为
%uXXXX格式。 - 数字、字母及
@*-_+.字符不会被编码。 - 解密时需要处理
%XX和%uXXXX两种格式。
替代方案
如果需要更标准的 URL 编码,可直接使用 PHP 内置函数:
$encoded = urlencode($str); // 编码
$decoded = urldecode($encoded); // 解码
以上代码提供了完整的 escape/unescape 实现方案,可根据实际需求选择使用自定义函数或 PHP 内置函数。







