SharePointの「リンクのコピー」後のエンコードされたパスを日本語に戻す

実際はSharePoint関係なく、エンコードされた日本語が対象ですが。


2023.3.28 訂正
DECODE AND CLIPBOARD COPY SCRIPT のhtmlの記述に誤りがありましたので、以下の通り訂正しました。

<input type="text" name="textForm" id="uriText" width="800px">
 ↓
<input type="text" name="textForm" id="uriText" style="width:800px">

 @smaphokidsさま、ご連絡頂きありがとうございました。


仕事でマイクロソフトのSharePointを使っています。
他のメンバーにファイルの配置場所を連携するため、「リンクのコピー」で配置フォルダのパスをコピーし、メールやチャットで連携しています。

このコピー機能、フォルダ名が英数字の場合はいいのですが、
日本語の場合UTF-8でエンコードされ、以下のような文字列になりますよね。

階層1/階層2/階層3

%E9%9A%8E%E5%B1%A41%2F%E9%9A%8E%E5%B1%A42%2F%E9%9A%8E%E5%B1%A43

正直このままでもいいのですが、
パッと見てどこのフォルダ階層なのか分かりやすい方がいい人もいるのかな、
と思い、以下のHTML(実際の処理はJavaScriptですが)を作りました。

Decode and Clipboard Copy Script
<html>
  <head><title>Decode & Copy Form</title></head>

  <body>
    <input type="text" name="textForm" id="uriText" style="width:800px">
    <p><input type="button" value="デコード&クリップボード" onclick="uriDecAndClipboard();"></p>

    <div>↓変換後パス↓</div>
    <hr>
    <div id="decUriText"></div>

    <script type="text/javascript">
      function uriDecAndClipboard() {
        // 文字列をデコードする
        var decTextVal = decodeURIComponent(document.getElementById('uriText').value);

        document.getElementById('decUriText').innerHTML = decTextVal;

        // クリップボードへコピーする
        var targetText = document.createElement("textArea");
        targetText.value = decTextVal;
        document.body.appendChild(targetText);
        targetText.select();
        document.execCommand("copy");
        targetText.parentElement.removeChild(targetText);
      }
    </script>
  </body>
</html>

何をやっているかざっくり説明すると

  • decodeURIComponent でエンコードされた文字列をデコード
  • document.execCommand(“copy”) で、クリップボードにデコードした文字列をコピー

です。

デコードした文字列をクリップボードにコピーする処理を入れたのは、
単純に変換後の文字列をいちいちコピーするのが面倒だったからです。

外部に漏らしたくないパスを変換したい場合に

こういったエンコード/デコードのサービスって、ウェブ上で色々公開されています。
(テキストボックスに変換したい文字を入れてボタンを押すと、変換してくれます。)
ではなんで作ったのかというと、

  1. ウェブで公開されているものは、裏でデータ収集されているかもしれない
  2. 単に久しぶりにコード書きたくなっただけ

まぁ、1はあまりないと思いますが。。。
仕事で使う以上、一応セキュリティに気を使って。。。という感じです(;^ω^)
どちらかというと、2のコードを書きたかった、の理由が強いですね。(作った時の気持ち的には。)
まぁ、PowerShell叩く方が早いんですけど。そこに疎い人もいたりしますので。

あまりツールとしては活用の機会は無いと思いますが、
文字列のデコードやクリップボードへのコピー処理の参考になれば幸いです。