编码路径的最佳方法,用作html有效的“id”或“name”标记

时间:2012-03-16 19:42:45

标签: php javascript html path encode

我有一个可编辑的文件系统,用户可以在表单中提交更改。

我想将文件的路径用作NAME或ID标签。

因为我怀疑我是第一个面对这个问题,所以可能会有更好的方法。

示例:

path: ../../disney/mouse/mickey.php

已知限制:

Jquery: no periods (.) and colons (:) 
HTML : Only letter, digits,hyphens ("-"), underscores ("_"), colons (":"), and periods (".")
HTML5: All but no spaces ( ) and at least 1 char.

PHP AND JAVASCRIPT必须能够以两种方式轻松编码/解码字符串。 atm我通过替换“/”& “”有不寻常的模式。

你建议使用哪种编码,是否有什么东西甚至会使路径收缩但保持独特?

问候:>

编辑:用户可以更改和编辑文件中的代码。为什么建议我为每个将路径与内容链接的字段使用额外的输入?我没有看到这一点,因为如果名称或id标签被正确编码,这不是问题。

3 个答案:

答案 0 :(得分:1)

这样做绝对没有意义。

您可以随时将数据作为值处理,而不是像所有人一样处理标识符 将路径存储为具有某个通用名称的字段值。没什么大不了的。

答案 1 :(得分:1)

您不应将您的值用作标识符。这不是一个好习惯,这就是你遇到这个问题的原因。但是,无论如何你想要这样做......

如果要对所有语言使用单个字符串,则需要创建一个字符串,该字符串排除在每种语言中找到的所有受限字符。如果受限制的字符是路径的一部分,则事情变得更难以保持独特。我建议你采取完整的路径,然后使用preg_replace()来更改所有不希望下划线的字符。

$old = '../../disney/mouse/mickey.php';
$new = preg_replace('/[^a-z0-9]/i', '_', $old);
echo $new;
//Outputs: "______disney_mouse_mickey_php"

您肯定想要修改它以添加更多允许的字符。您限制的越少,发生非唯一ID /名称属性冲突的可能性就越小。

如果您想要一个不太可能具有可能的非唯一ID /名称的方法,那么您可以将路径包装在md5()(PHP)中以创建md5哈希。这对阅读不太友好,但对于大多数非关键目的而言应该足够独特。

$old = '../../disney/mouse/mickey.php';
$new = md5($old);
echo $new;
//Outputs: "403d07916233847221263553573c5321"

回应您的评论,这是我的最后一次尝试。此/ custom /函数将编码在源中唯一且可读的路径。这也将允许您解码为原始路径字符串。允许的字符和转义字符是可自定义的,以便您可以找到一个可用于您需要的所有语言的字符。

function customPathEncode($old)
{
    $chars_allowed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $escape_char = '%';
    $new = '';

    $old_length = strlen($old);
    for($i = 0; $i < $old_length; ++$i)
    {
        if(false === strpos($chars_allowed, $old[$i]))
        {
            $new .= $escape_char.bin2hex($old[$i]);
        }
        else
        {
            $new .= $old[$i];
        }
    }

    return $new;
}
echo customPathEncode('../../disney/mouse/mickey.php');
//Output: "%2e%2e%2f%2e%2e%2fdisney%2fmouse%2fmickey%2ephp"

答案 2 :(得分:0)

我正在使用 Java ,我通过对 hex 表示的路径进行编码/解码来解决这个问题。文件路径

我对 PHP 不太熟悉,但我想你可以使用bin2hex&amp; hex2bin为此目的。

希望这会有所帮助......

相关问题