我目前正在使用base64对短字符串进行编码并稍后对其进行解码,并想知道是否有更好(更短)的替代方案。
$string = '/path/to/img/image.jpg';
$convertedString = base64_encode($string);
// New session, new user
$convertedString = 'L3BhdGgvdG8vaW1nL2ltYWdlLmpwZw==';
$originalString = base64_decode('L3BhdGgvdG8vaW1nL2ltYWdlLmpwZw==');
// Can $convertedString be shorter by any means ?
要求:
目标:
从路径文件中获取一个干净的唯一ID,该路径文件不是路径文件,可以在URL中使用,而无需使用数据库。
我经常搜索和阅读,看起来并不存在,但无法找到明确的答案。
答案 0 :(得分:2)
好吧,因为您在网址中使用这些内容,为什么不使用$ chmod a+x run.py
$ ./run.py
和rawurlencode($string)
?
如果您可以保留一个字符,例如rawurldecode($encodedString)
(即确保-
永远不会出现在您的文件名中),那么您可以通过-
和{{1}做得更好}。根据您选择的文件名,这将创建与原始文件名长度相同的ID。 (如果文件名中包含多字节字符,则无效;在这种情况下,您需要使用一些rawurlencode(str_replace('/', '-', $string))
函数。)
您可以尝试使用压缩函数,但对于与文件路径一样短的字符串,压缩通常会使输出大于输入。
最终,除非您愿意使用数据库,禁止使用某些文件名,或者您知道会出现什么类型的文件名,您可以期望的最好的ID是短或几乎短的ID原始文件名。否则,这将是一个通用的压缩功能,这是不可能的。