我的問題重複的字符是,我有一個看起來像「Bd333333d」 URL訪問鍵。我需要的字符串長度不能超過原始長度,但可能會更短。我想轉換/模糊字符串中的重複字符,並能夠將它們轉換回原始。正則表達式匹配和編碼在一個字符串
3
A
回答
0
PHP已經可以做字符串壓縮,所以你爲什麼要拿出自己的算法? See this post提供了一些將gzip壓縮與urlencoding相結合的優秀建議。
你不說,不管你是在內部存儲這些字符串或使用它們作爲一個URL的一部分。如果它是前者,那麼這更容易,因爲你可以將它存儲爲更緊湊的二進制文件。
0
這是preg_replace_callback
$str = 'Bd333333dddd';
function shorten($str) {
return preg_replace_callback(
'~(.)\1+~',
function($matches) {
return sprintf('%s.%s', $matches[1], strlen($matches[0]));
},
$str
);
}
0
一個很好的任務更新:感謝您的幫助!在做了關於混合ROT13概念的一些工作後,我想出了一些適合我的東西。對不起,是跛腳和張貼自己的解決方案,但在這裏它是:
function ROT_by_strpos($s,$type='in'){
$index = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ($n = 0; $n<strlen($index); $n++){
$k[] = substr($index,$n ,1);
}
if($type == 'out'){
$k = array_reverse($k);
}
$rot = '';
$count = 1;
$len = strlen($s);
for ($n = 0; $n<strlen($s); $n++){
$key_in[] = substr($s,$n ,1);
}
for ($i = 0; $i < $len; $i++){
$key = array_search($key_in[$i], $k)+1;
if($type == 'in'){
if($key+$i > count($k)){
$rev = $key+$i - count($k);
$new_key = $rev;
}else{
$new_key = $key+$i;
}
}else{
if($key+$i >= count($k)){
$adv = $key+$i - count($k);
$new_key = $adv;
}else{
$new_key = $key+$i;
}
}
$rot .= $k[$new_key];
}
return $rot;
}
這個假設可能的字符是從$指數和代碼字符串長度< = 10個字符長。
用法:
$關鍵= 「Bd333333d」;
在$ = ROT_by_strpos( '在' $鍵);
$出= ROT_by_strpos(在$, '出');
echo「$ key - $ in - $ out」; // Bd333333d - Cf6789ABm - Bd333333d
有可能是一個更優雅的方式來做到這一點,但它確實工作。任何反饋或改進將不勝感激,如果你想添加一些東西。 :)
相關問題
- 1. 正則表達式正則表達式匹配字符串
- 2. 正則表達式匹配字符串
- 3. 正則表達式匹配字符串
- 4. 正則表達式匹配字符串
- 5. 正則表達式匹配字符串
- 6. 正則表達式匹配字符串
- 7. 正則表達式匹配字符串
- 8. 正則表達式匹配字符串
- 9. 正則表達式匹配字符串
- 10. 正則表達式字符串匹配?
- 11. 正則表達式匹配兩個詞在一個字符串
- 12. 重複字符匹配正則表達式匹配字符串
- 13. 正則表達式則表達式匹配的字符串
- 14. 正則表達式 - 在一個字符串中多次匹配
- 15. 在java正則表達式中匹配一個字符串
- 16. 在sql中匹配一個字符串的正則表達式
- 17. 正則表達式匹配:不包含在一個字符串
- 18. PHP正則表達式匹配一個字符串列表
- 19. 正則表達式匹配「一切,但」一個字符串
- 20. 正則表達式:只匹配字符串A和字符串B不匹配
- 21. 匹配匹配字符串的正則表達式的子串
- 22. 正則表達式匹配和替換多個字符串
- 23. Perl正則表達式正則表達式匹配字符串除外,不匹配字符串
- 24. 正則表達式匹配字符串中的單個字符
- 25. 正則表達式匹配字符串的前n個字符
- 26. Powershell正則表達式匹配字符串,除了第一個
- 27. 正則表達式搜索字符串匹配下一個
- 28. 問題一個字符串匹配正則表達式
- 29. 匹配一個JS字符串與正則表達式
- 30. 正則表達式匹配一個字符串,並替換
你可以用第一個解決方案,並逃離自然發生的管道,你需要做多少?也許把它翻譯成二進制文件,然後使用解決方案可以使它更小? – Ben 2011-04-27 04:48:42
如果人們仍然可以看到編碼密鑰,並改用它們 - 有什麼安全增益? – Orbling 2011-04-27 04:49:23
@mazzzzz:基本上只是加擾字符串以避免重複的字符,但保持相同的字符串長度。 – vanarie 2011-04-27 04:55:42