【问题标题】:PHP equivalent for javascript escape/unescapejavascript 转义/取消转义的 PHP 等效项
【发布时间】:2014-06-22 05:40:34
【问题描述】:

假设我有一个字符串: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 中的转义函数,它会做同样的事情(将 something 编码为:%73%6F%6D%65%74%68%69%6E%67)

怎么做?

【问题讨论】:

  • 转义/编码 !==“加密”。目的是什么?
  • urlencode 不起作用? php.net/manual/en/function.urlencode.php
  • escape('something') != '%73%6F%6D%65%74%68%69%6E%67'
  • 您所拥有的是 ascii 十六进制值。在php中你可以使用chr()/ord()
  • rawurlencodeescape 等效项

标签: php javascript escaping


【解决方案1】:

PHP:

rawurlencode("your funky string");

JS:

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

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

【讨论】:

    【解决方案2】:
    rawurldecode('%73%6F%6D%65%74%68%69%6E%67');
    

    【讨论】:

    • 您可能想详细说明它的作用、为什么有用等。SO 是关于学习,而不仅仅是回答问题。
    【解决方案3】:

    先澄清一下:

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

    错了。 (顺便说一句,JS escape() 函数已弃用。您应该改用encodeURIComponent()!)

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

    是的,这会将 "something" 写入文档(因为 escape()unescape() 也已弃用;请改用 decodeURIComponent())。


    你的问题:

    我需要 PHP 中的 [snip] 函数,它 [snip] 将 something 编码为 %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
    

    【讨论】:

    • dechex(ord()) == bin2hex
    • 同时更新hexToString()函数;更容易在字符串上使用pack(),而不是遍历十六进制值并在每个值上使用chr(hexdec())
    猜你喜欢
    • 2012-12-31
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2015-05-31
    • 2011-09-15
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多