10

假设我有一个字符串:something

当我在 JS 中转义它时,我得到这个:%73%6F%6D%65%74%68%69%6E%67

所以我可以在JS中使用这段代码来解码它:

 document.write(unescape('%73%6F%6D%65%74%68%69%6E%67'));

我需要 PHP 中的转义函数,它会做同样的事情(会将某些内容编码为:%73%6F%6D%65%74%68%69%6E%67

怎么做 ?

4

3 回答 3

15

PHP:

rawurlencode("your funky string");

JS:

decodeURIComponent('你的%20funky%20string');

不要使用escape,因为它已被弃用。

于 2013-08-27T14:46:00.630 回答
5
rawurldecode('%73%6F%6D%65%74%68%69%6E%67');
于 2014-06-21T21:40:34.190 回答
2

首先澄清一下:

假设我有一个字符串:something
当我在 JS 中转义它时,我得到这个:%73%6F%6D%65%74%68%69%6E%67

那是错误的。(顺便说一句,JSescape()函数已被弃用。您应该encodeURIComponent()改用!)

所以我可以在JS中使用这段代码来解码它: document.write(unescape('%73%6F%6D%65%74%68%69%6E%67'));

是的,这将在文档中写入“某些东西”(因为escape(), 也unescape()已弃用;请decodeURIComponent()改用)。


对于你的问题:

我需要 PHP 中的 [snip] 函数,它 [snip]将某些内容编码为%73%6F%6D%65%74%68%69%6E%67

您正在寻找的是字符的十六进制表示。因此,要从字符串"something"中获取字符串"%73%6F%6D%65%74%68%69%6E%67",您需要:

<?php
function stringToHex($string) {
    $hexString = '';
    for ($i=0; $i < strlen($string); $i++) {
        $hexString .= '%' . bin2hex($string[$i]);
    }
    return $hexString;
}

$hexString = stringToHex('something');
echo strtoupper($hexString); // %73%6F%6D%65%74%68%69%6E%67

向后:

function hexToString($hexString) {
    return pack("H*" , str_replace('%', '', $hexString));
}

$string = hexToString('%73%6F%6D%65%74%68%69%6E%67');
echo $string; // something
于 2013-03-20T22:00:27.297 回答