PHP - 替代Base64,结果更短?

时间:2015-12-13 23:15:00

标签: php

我目前正在使用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 ? 

要求:

  • 可能的结果更短
  • 任何时候在不同的会话中都必须是可逆的(因此是唯一的)
  • 不需要任何安全措施(任何人都可以猜到)
  • 可以在URL中使用的任何类型的字符(斜杠除外)
  • 可以是外部库

目标:

从路径文件中获取一个干净的唯一ID,该路径文件不是路径文件,可以在URL中使用,而无需使用数据库。

我经常搜索和阅读,看起来并不存在,但无法找到明确的答案。

1 个答案:

答案 0 :(得分:2)

好吧,因为您在网址中使用这些内容,为什么不使用$ chmod a+x run.py $ ./run.py rawurlencode($string)

如果您可以保留一个字符,例如rawurldecode($encodedString)(即确保-永远不会出现在您的文件名中),那么您可以通过-和{{1}做得更好}。根据您选择的文件名,这将创建与原始文件名长度相同的ID。 (如果文件名中包含多字节字符,则无效;在这种情况下,您需要使用一些rawurlencode(str_replace('/', '-', $string))函数。)

您可以尝试使用压缩函数,但对于与文件路径一样短的字符串,压缩通常会使输出大于输入。

最终,除非您愿意使用数据库,禁止使用某些文件名,或者您知道会出现什么类型的文件名,您可以期望的最好的ID是短或几乎短的ID原始文件名。否则,这将是一个通用的压缩功能,这是不可能的。