2016-10-06 1 views
1

現在のシステムでは、親グループの名前と一致するファイルが保存されます。そのため、「My Devices」という名前のグループは、「My + Devices.jpg」という名前の画像を保存します。これは素晴らしく、PHPとJSのラインのどこかで "My%20Devices.jpg"に変換されてしまっても問題はありませんでしたが、その前にスペースをプラス記号に変換することができました。PHPの文字列をファイル名として使用するように変換する...特殊文字を取り除くことなし

ここで、グループに「Joe's Devices」という名前を付けることができるように、アポストロフィのような他の特殊文字を考慮する必要があります。私はそれをファイル名にすることができる何かに変換するための何らかの方法が必要です。しかし、誰かが "Joes Devices"(アポストロフィなし)のグループ名を使用している場合、特殊文字を除外することはできません。

私はurlencode()とrawurlencode()を試しましたが、それらはパーセント記号を使用しています。これはURLには適していますが、ファイル名にはあまり役に立ちません。私はbase64_encode()ははるかに長い文字列だが、より良いと思った。しかし、それにはファイル名には不利な等号が含まれています。

文字列をファイル名に適した文字列に変換する方法はありますか?元の文字列に戻すことができますか?または、この機能を完全にコード化し、ID一致などを使用する必要がありますか?

+0

あなたが「親グループ」によって何を意味するか説明していただけますか? –

+1

ファイル名をmd5にすると、ファイル名にスペースや特殊文字が含まれなくなります。これは非常に難しいことでも、あなたはまだ衝突に遭遇する可能性があることを覚えておいてください。 –

+0

これは、家庭内のWiFi上のデバイス群です。しかし、それは何かのグループになる可能性があります、それは単にファイルを任意のグループ名と同じ名前にする必要があることを意味します。 – SpaceNinja

答えて

2

あなたの探求は、URLで安全なbase64でエンコードされた文字列を作成することに関する質問と非常に似ています。

は1例については、この答えを参照してください:https://stackoverflow.com/a/5835352/660694

私のソリューションは、この変化のだろう。

function base64_safe_encode($input, $stripPadding = false) 
{ 
    $encoded = strtr(base64_encode($input), '+/=', '-_~'); 

    return ($stripPadding) ? str_replace("~","",$encoded) : $encoded; 
} 

は今、あなたは簡単に可逆的であり、ファイル名やURLの安全なbase64でエンコードされた文字列を生成することができます。

は、私のアプリケーションの一つで、私は、このラッパー関数を持っています。

メモ:必要に応じて、文字列の最後にパディングを取り除くオプションがあります。デコード時には、埋め込み文字はPHPには必要ありません。

デコード機能は、その後、非常に簡単です:

function base64_safe_decode($input) 
{ 
    return base64_decode(strtr($input, '-_~', '+/=')); 
} 
1

「マイデバイス」という名前のグループがあるとします。あなたは、データベースか何かでそれを保存するためにMD5でそれの名前をハッシュ:

$group = 'My Device'; 
$filename = md5($group) . '.png'; 

表示したり、それに取り組む、あなたが好きな場所あなたがもう一度、グループ名をハッシュするには:

<?php 
$group = 'My Device'; 
$filename = md5($group) . '.png'; 
?> 
<img src="<?php print $filename; ?>" /> 
+1

しかし、ハッシュを与えれば、あなたは 'My Device'をOPのポイントにすることはできません。 – AbraCadaver

+1

私は今参照してください。しかし、なぜ "My Device"をデータベースやテキストファイルに保存して、 "ID"に基づいた値で作業し、ハッシュを保存することができますか?少なくとも、ファイル名に奇妙なシンボルを持つ必要がないのは回避策です。 –

+0

私はこの修正をできるだけ小さくしようとしていますし、できればそれが元のやり方で書き直す必要はありません。しかし、これをリファクタリングする必要があるなら、それは良い考えです。 – SpaceNinja

関連する問題