0

base36 としてデコードされた文字列、つまり 0-9a-z があります。他の文字は次のようにデコードされます: base36 に変換され、先頭に大文字の「A」が続き、その後に文字「B」が続く Unicode 文字コード。複数の Unicode 文字が表示される場合、'B' が後に続く場合は最後の文字のみが表示されます。

例:

zergme@wtfd-婴儿服饰.com

次のように変換:

zergmeA1sBwtfdA19Ahv8Ag1rAkctAub4A1aBcom

そのようにデータを変換するのは便利でしたが、今はデコード イット バック アルゴリズムの書き方に頭を悩ませています。

文字コードを Unicode 文字に変換する関数を既に用意しました。これを「unichr($code)」と呼びます。

...しかし、これらの文字を見つける良い方法が思いつきません。

私は最初に正規表現を使用しようとしていました。

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

しかし、それは私が望むようには機能しませんでした...そして、マッチでカスタム変換関数別名「unichr()」をキャストする方法にも気づきませんでした。

その後、strpos() を使用して手動で文字を検索することも考えていましたが、面倒であることが判明しました。

いくつかのパターンを教えていただけますか?または、正規表現について詳しく説明する必要があるか、ループを使用する必要がありますか? 私はちょっと空白です...ありがとう:)

ロルマオ

それだけです。あなたの貢献のおかげで、私は理解したようです:

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

2 に答える 2

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 に答える
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 に答える