我的问题重复的字符是,我有一个看起来像“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. 在java正则表达式中匹配一个字符串
- 12. PHP正则表达式匹配一个字符串列表
- 13. 正则表达式匹配“一切,但”一个字符串
- 14. 匹配匹配字符串的正则表达式的子串
- 15. 正则表达式匹配其中一个字符串
- 16. grep第一个匹配正则表达式的字符串
- 17. 正则表达式匹配一个确切的字符串
- 18. 需要一个正则表达式匹配多行字符串
- 19. 正则表达式匹配一个字符串与星号
- 20. 匹配一个JS字符串与正则表达式
- 21. 找到一个匹配字符串的正则表达式?
- 22. 问题一个字符串匹配正则表达式
- 23. 正则表达式来匹配一个url内的字符串
- 24. 正则表达式匹配字符串,但不是另一个
- 25. 正则表达式匹配一个字符串,并替换
- 26. Powershell正则表达式匹配字符串,除了第一个
- 27. 最后一个字符串与正则表达式不匹配
- 28. 正则表达式 - 匹配一个字
- 29. 正则表达式匹配base64编码
- 30. PHP - 正则表达式匹配的字符串和数字
你可以用第一个解决方案,并逃离自然发生的管道,你需要做多少?也许把它翻译成二进制文件,然后使用解决方案可以使它更小? – Ben 2011-04-27 04:48:42
如果人们仍然可以看到编码密钥,并改用它们 - 有什么安全增益? – Orbling 2011-04-27 04:49:23
@mazzzzz:基本上只是加扰字符串以避免重复的字符,但保持相同的字符串长度。 – vanarie 2011-04-27 04:55:42