我有一個字符串被解碼爲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)/'
1.我不知道這是隻可轉換使用正則表達式,你需要一個解析器來掃描字符串,用'分裂[AB]'並分別處理每個編碼字符。 2.如果你想編碼新的數據,考慮punycode算法 - 它的兩個方向至少是衆所周知的。 – Piskvor 2012-07-24 13:22:53
爲什麼不使用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
好吧,我希望你意識到每個字形需要6個字符,即:%E5%A9只是一個字符。但對我而言,如果轉換爲base62,則會減少兩倍。 – Anonymous 2012-07-24 13:29:30