Skip to content

Latest commit

 

History

History
39 lines (29 loc) · 1.88 KB

Apexで扱うURLパラメーターに「+」がある時に起こったバグとその対処.md

File metadata and controls

39 lines (29 loc) · 1.88 KB

概要

ApexでBlobからStringに変換しようとした時に起こったバグとその対処 の記事で紹介したようなバグが発生するため、暗号化したBlobをbase64形式でencodeしてURLパラメーターに付与する。 その後、別ページでパラメーターを受け取った際、encodeした文字列に「+」記号が含まれていると空白に変換されてしまうバグ(?)が発生したのでその時の対処について記述する。

問題が発生したソースコード

    Blob key = Crypto.generateAesKey(128);
    // 暗号化する文字列「00000」
    Blob data = Blob.valueOf('00000');
    Blob encryptedData = Crypto.encryptWithManagedIV('AES128', key, data);
    String encodedEncryptedData = EncodingUtil.base64Encode(encryptedData);

対処したソースコード

    Blob key = Crypto.generateAesKey(128);
    // 暗号化する文字列「00000」
    Blob data = Blob.valueOf('00000');
    Blob encryptedData = Crypto.encryptWithManagedIV('AES128', key, data);
    String encodedEncryptedData = EncodingUtil.base64Encode(encryptedData);

    // URLパラメーターをUTF-8でエンコード
    encodedEncryptedData = EncodingUtil.urlEncode(encodedEncryptedData, 'UTF-8');

原因

URLのパラメーターに追加する際はURLエンコードしないと無効な形式になってしまうようです。 URLパラメーターを弄るsalesforce開発者の方は注意して開発して欲しいです。

参考文献