2012-07-24 46 views
0

我有一个字符串被解码为base36,即0-9a-z, 任何其他字符被解码如下:一个Unicode字符代码,转换为base36和先行以大写字母“A”开头,后跟字母“B”。 如果出现多个unicode字符,则只显示最后一个字符,如果后跟'B'。PHP:需要解码一个字符串与UTF字符嵌入

例子:

[email protected]婴儿服饰.com 

转换为:

zergmeA1sBwtfdA19Ahv8Ag1rAkctAub4A1aBcom 

很方便,这样的数据转换,但我现在抨击我的头怎么写呢解码算法回。

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

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

我是想先用正则表达式,像:

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

但它没有工作,我想要的方式......我还没有意识到如何又名投我的自定义功能皈依'unichr()'的比赛。

然后我也在考虑用strpos()手动查找字符,但它也变得混乱。

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

LOLMAO

就是它,看起来像我想通了,感谢你的贡献:

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

1.我不知道这是只可转换使用正则表达式,你需要一个解析器来扫描字符串,用'分裂[AB]'并分别处理每个编码字符。 2.如果你想编码新的数据,考虑punycode算法 - 它的两个方向至少是众所周知的。 – Piskvor 2012-07-24 13:22:53

+0

为什么不使用UTF-8编码?它返回字符串:zergme%40wtfd-%E5%A9%B4%E5%84%BF%E6%9C%8D%E9%A5%B0.com。这可以用Utf8解码器解码。 http://php.net/manual/en/function.utf8-encode.php – Pilatus 2012-07-24 13:26:16

+0

好吧,我希望你意识到每个字形需要6个字符,即:%E5%A9只是一个字符。但对我而言,如果转换为base62,则会减少两倍。 – Anonymous 2012-07-24 13:29:30

回答

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); 
+0

是的,这看起来可行,你增强了我对preg_callback func的知识。虽然它仍然不起作用,因为你捕获的第二组也可以作为分隔符。添加非捕获组几乎可以解决它:例如'/A(.*?)(?=A|B)/'但它仍然不会让我摆脱那个B信... – Anonymous 2012-07-24 14:05:55

+0

好吧,我看到问题与我原来的正则表达式,但如果你使用一个非捕获的第二组对我来说工作得很好。我的回调针对测试字符串执行7次,'$ match [1]'等于'1s','19','hv8','g1r','kct','ub4'和'1a' – 2012-07-24 14:21:10

+0

是的,但是你是否意识到'B'没有被捕获,所以结果仍然包含字母'B':)我编辑了这个问题以适应我的工作:它会捕获'B'但不捕获第二个'A'... – Anonymous 2012-07-24 14:24:23

0

如何aobut Base64编码(gzcompress )和解码(gzuncompress)。在文本字段

<?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”:

保存名为 “testBase64.php” 以下。

输出:

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

base64编码:.xœ«J-极目(/IKÑUS62645³Òæ--ÚÌØÂH[YXE% ççG°@

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

希望这会有所帮助。

+0

但这并没有回答这个问题。我考虑了很多方法,并且我转换数据的方式很方便。 – Anonymous 2012-07-24 13:33:45

相关问题