md5无法转换文件名实体

时间:2017-01-14 13:30:02

标签: php md5

将文件名转换为md5时遇到问题。

我有文件名:

  

20072437_60-0001#2013年12月7日^ 11.41.23.jpg

但如果我在文件名中有'#'和'^',它就无法工作。 如何在不删除'#'nad'^'的情况下使其工作。

我的代码:

    if ($inline === true) {
        $thumbname = md5($file).'.jpg';
    } else {
        $thumbname = md5($file).'-big.jpg';
    }

1 个答案:

答案 0 :(得分:0)

以下代码对我来说非常合适?

<?php
$inline = true;
$file = '20072437_60-0001#12-07-2013^11.41.23.jpg';

if ($inline === true) {
        $thumbname = md5($file).'.jpg';
    } else {
        $thumbname = md5($file).'-big.jpg';
    }

echo $thumbname;

输出: -

960f23e66bdfdff1d10a53f4957387f8.jpg

这样做的另一种方式(我认为你正在寻找)

通过创建一个函数来获取最后一个小数位之前的eveything: -

function reverse_strrchr($haystack, $needle)
{
    $pos = strrpos($haystack, $needle);
    if($pos === false) {
        return $haystack;
    }
    return substr($haystack, 0, $pos);
}

所以最终结果如下: -

<?php

function reverse_strrchr($haystack, $needle)
{
    $pos = strrpos($haystack, $needle);
    if($pos === false) {
        return $haystack;
    }
    return substr($haystack, 0, $pos);
}

$inline = false;
$file = '20072437_60-0001#12-07-2013^11.41.23.jpg';

$newFile = reverse_strrchr( $file, '.' );

if ($inline === true) {
    $thumbname = md5($newFile).'.jpg';
} else {
    $thumbname = md5($newFile).'-big.jpg';
}

echo $thumbname;
?>

如果$ inline = true,则会输出: -

0f068b6cd39ea23fc73c5c51ea08da8f.jpg

如果$ inline = false: -

0f068b6cd39ea23fc73c5c51ea08da8f-big.jpg

您可以看到示例@ http://sandbox.onlinephpfunctions.com/code/10b6a2148b44601c3aacdc009336b0cde7989109