0

我有一个字符串被解码为base36,即0-9a-z,任何其他字符都被解码如下:一个unicode字符代码,转换为base36,前面是大写字母'A',后面是字母'B'。如果出现多个 unicode 字符,则只有最后一个字符后跟“B”。

例子:

zergme@wtfd-婴儿服饰.com

转换为:

zergmeA1sBwtfdA19Ahv8Ag1rAkctAub4A1aBcom

以这种方式转换数据很方便,但现在我对如何编写解码返回算法感到头疼。

我已经提供了一个将 charcodes 转换为 Unicode chars 的函数,我们称之为 'unichr($code)';

...但我想不出找到这些字符的好方法。

我试图首先使用正则表达式,例如:

preg_replace('/A.*?B?(?=[AB])/',"$1",$mail);

但它并没有按照我想要的方式工作......而且我也没有意识到如何在比赛中投射我的自定义转换函数,即“unichr()”。

然后我也在考虑用 strpos() 手动查找字符,但结果也很混乱。

你能建议一些模式吗?或者我是否应该详细说明正则表达式或尝试使用一些循环?我有点空白...谢谢:)

洛茂

就是这样,看起来我想通了,感谢您的贡献:

'/A(.*?)((?=A)|B)/'
4

2 回答 2

0

如何使用 Base64 编码(gzcompress)和解码(gzuncompress)。

使用名称“testBase64.php”保存以下内容:

<?php
    if(isset($_POST['text'])){
       echo("<b>input:</b> ".$_POST['text']."<br/>");
       $c = gzcompress($_POST['text']); 
       echo("<b>base64 encoding:</b> .".$c."<br/>");
       echo("<b>base64 decoding:</b> " .gzuncompress($c));
       exit;
    }
?>

<html>

    <body>
       <form method=post action=testBase64.php>
          <input type=text name=text />
          <input type=submit />
       </form>
    </body>
</html>

运行并在文本字段中输入“zergme@wtfd-婴儿服饰.com”。

输出:

输入: zergme@wtfd-婴儿服饰.com

base64 编码: .xœ«J-JÏMu(/IKÑUS62645³Òæ–– ÚÌØÂH[YXë%ççG°@

base64解码: zergme@wtfd-婴儿服饰.com

希望这可以帮助。

于 2012-07-24T13:30:33.677 回答
0

您是否考虑过使用preg_replace_callback()?它将一个函数而不是字符串作为替换值,并将匹配项传递给函数并使用函数的返回值作为替换字符串。

松散的例子,你必须玩一下

<?php
$str = 'zergmeA1sBwtfdA19Ahv8Ag1rAkctAub4A1aBcom';

function convert_to_unicode_cb( $match )
{
    // $match1 would be 1s, 19, hv8, etc
    return unichr( $match[1] );
}

preg_replace_callback( '/A(.*?)(?=A|B)/', 'convert_to_unicode_cb', $str );
于 2012-07-24T13:41:48.887 回答