PHP:需要解码嵌入了utf字符的字符串


PHP: need to decode a string with utf chars embedded

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

示例:

zergme@wtfd-婴儿服饰.com

转换为:

zergmeA1sBwtfdA19Ahv8Ag1rAkctAub4A1aBcom

以这种方式转换数据很方便,但现在我正在思考如何编写解码回算法。

我已经提供了一个将charcode转换为Unicode字符的函数,它被称为"unichr($code)";

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

我试着首先使用regexp,类似于:

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

但它并没有按照我想要的方式工作。。。我也没有意识到如何在比赛中转换我的自定义转换函数,也就是"unichr()"。

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

你能建议一些模式吗?或者我是应该详细介绍regexp还是尝试使用一些循环?我有点茫然。。。谢谢:)

LOLMAO

就是这样,看起来我明白了,多亏了你的贡献:

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

您是否考虑过使用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 );

如何使用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

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

希望这能有所帮助。