Edited at

Slack のファイル名がおかしくなるやつを解読する

More than 1 year has passed since last update.


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