Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用intval和base_convert创建短链接_Php - Fatal编程技术网

Php 使用intval和base_convert创建短链接

Php 使用intval和base_convert创建短链接,php,Php,我发现了一个关于编写像TinyURL()这样的短代码的问题,我不确定我所做的是否有效 我有以下测试代码: <?php $val = intval('murwaresuperchainreaction', 36); echo $val."\n"; echo base_convert($val, 10, 36) . "\n"; echo "---\n"; $val = intval('murwarebarnstormers', 36); echo $val."\n"; echo base_co

我发现了一个关于编写像TinyURL()这样的短代码的问题,我不确定我所做的是否有效

我有以下测试代码:

<?php
$val = intval('murwaresuperchainreaction', 36);
echo $val."\n";
echo base_convert($val, 10, 36) . "\n";
echo "---\n";
$val = intval('murwarebarnstormers', 36);
echo $val."\n";
echo base_convert($val, 10, 36) . "\n";
echo "---\n";
$val = intval('murwarenightmare', 36);
echo $val."\n";
echo base_convert($val, 10, 36) . "\n";
我的问题是,为什么所有的结果都是一样的?根据我上面链接的答案,我应该得到“防碰撞”的结果,但它们都是相同的…

根据
intval

最大值取决于系统。32位系统的最大有符号整数范围为-2147483648到2147483647。例如,在这样一个系统上,intval('1000000000000')将返回2147483647。64位系统的最大有符号整数值为9223372036854775807

使用较短的字符串尝试此方法时,将获得无冲突的结果。但是大字符串将返回最大值。因此,此方法不适用于从大字符串创建短代码

根据
intval

最大值取决于系统。32位系统的最大有符号整数范围为-2147483648到2147483647。例如,在这样一个系统上,intval('1000000000000')将返回2147483647。64位系统的最大有符号整数值为9223372036854775807


使用较短的字符串尝试此方法时,将获得无冲突的结果。但是大字符串将返回最大值。因此,此方法不适用于从大字符串创建短代码

您链接的答案中编码的值是一个整数-一个引用该链接记录的ID。通过对ID进行Base 64或Base 36编码,字符串将变得更短:

echo base_convert(1234567, 10, 36);
// output qglj
intval
然后可用于将缩短的字符串转换回ID:

echo intval('qglj', 36);
// output 1234567

您链接的答案中编码的值是一个整数-一个引用该链接记录的ID。通过对ID进行Base 64或Base 36编码,字符串将变得更短:

echo base_convert(1234567, 10, 36);
// output qglj
intval
然后可用于将缩短的字符串转换回ID:

echo intval('qglj', 36);
// output 1234567