PHP相当于javascript escape/unescape

chu*_*byk 6 javascript php escaping

假设我有一个字符串:某事

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

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

 document.write(unescape('%73%6F%6D%65%74%68%69%6E%67'));
Run Code Online (Sandbox Code Playgroud)

我需要在PHP中逃生功能,也将这样做(将编码的东西到:%73%6F%6D%65%74%68%69%6E%67)

怎么做 ?

i--*_*i-- 10

PHP:

rawurlencode("your funky string");
Run Code Online (Sandbox Code Playgroud)

JS:

decodeURIComponent( '您%20funky%20string');

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


Rog*_*raj 5

rawurldecode('%73%6F%6D%65%74%68%69%6E%67');
Run Code Online (Sandbox Code Playgroud)

  • 您可能想详细说明它的作用,为何有用等。SO是关于学习的,而不仅仅是回答问题。 (3认同)

eye*_*hUp 3

首先澄清一些:

假设我有一个字符串: some
当我在 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
Run Code Online (Sandbox Code Playgroud)

向后:

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

$string = hexToString('%73%6F%6D%65%74%68%69%6E%67');
echo $string; // something
Run Code Online (Sandbox Code Playgroud)