Slack のファイル名がおかしくなる?
- ある時からアップロードされたファイルをダウンロードすると日本語のファイル名がおかしくなっていたらしい
- 個人的にはあまりファイルダウンロードしないので気づいていなかったけど、なんか社内で話題になっていたみたいなので調べてみることにした
どういう状況か
例えば オトバンク.txt
というファイルが u30aau30c8u30d0u30f3u30af.txt
こうなる。ということらしいです。
この時点で PHPer には見覚えがある文字列が並んでいる気がしますね。(や、他の言語でも見れると思うけど)
u****
が続いているという規則性がありますね。これは PHP json_encode
した時のと同じじゃないですか!ということでサクッと
<?php
$filename = 'u30aau30c8u30d0u30f3u30af.txt';
echo preg_replace_callback('/(u[0-9a-z]{4})/', function($matches) {
return json_decode(sprintf('"\\%s"', $matches[1]));
}, $filename);
こういうものを書いてみました。ビンゴ。
(いやしかし雑なコードだなあ。PHP 最高)
これは何か
つまり、ユニコードエスケープされているところから stripslashes かましちゃった感じですね。
再現するなら
<?php
echo stripslashes(json_encode('久々にPHP書いたわ.mp3'));
こんな感じで作れます。意味ないけど。
まとめ
Slack に報告するのはこちらになるのではないでしょうか?
https://slack.com/help/contact
おまけ
ついでだったので、JavaScript ですぐに文字列作れるやつも書いてみました。
http://jsdo.it/riaf/wa5U