yuta_sawamura
@yuta_sawamura (Yuta Sawamura)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

OutlookカレンダーにURLリンクで予定を追加する際に、改行をエンコードすると500エラーになる

前提

  • HTMLとJavaScript
  • OutlookカレンダーのURLリンクを設置し、ユーザーがクリックするとに予定登録画面に遷移
  • URLリンクのパラメータに値をセットしておくと、予定登録画面に遷移した際にパラメータの値が初期値になる

例えば、下記のようなURLリンクがあります。

https://outlook.live.com/owa/?path=/calendar/action/compose&subject=hoge&body=fugafuga

URLリンクをクリックすると、下記の画面に遷移します。タイトルにhoge、内容にfugafugaが初期値になります。

スクリーンショット 2021-03-24 14.36.00.png

発生している問題

パラメータのbodyの値に日本語や改行など様々な値が入る可能性があります。そのため、JavaScriptのencodeURIメソッドを使用し、エンコードしています。エンコードの際に下記のような問題が発生します。

【問題1】
改行をエンコードし、Outlookカレンダーに遷移すると500エラーが発生します。エラー原因は、改行をエンコードした%0Aです。なぜ、%0Aが含まれるとエラーになるのか理由がわかりません。
https://outlook.live.com/owa/?path=/calendar/action/compose&subject=hoge&body=fuga%0Afuga

スクリーンショット 2021-03-24 14.47.51.png

【問題2】
半角をエンコードし、Outlookカレンダーに遷移するとが半角の代わりに+が表示されます。

https://outlook.live.com/owa/?path=/calendar/action/compose&subject=hoge&body=fuga%20fuga

スクリーンショット 2021-03-24 14.51.36.png

【問題3】
全角をエンコードし、Outlookカレンダーに遷移するとが全角の代わりに半角が挿入され表示されます。
https://outlook.live.com/owa/?path=/calendar/action/compose&subject=hoge&body=fuga%E3%80%80fuga

スクリーンショット 2021-03-24 14.54.56.png

これらの理由がわかる方がいましたら教えていただけるとありがたいです。

試したこと

同様の仕様でGoogleカレンダーは実装できました。内容はfuga + 改行 + fugaです。

https://www.google.com/calendar/render?action=TEMPLATE&text=hoge&details=fuga%0Afuga

スクリーンショット 2021-03-24 15.07.33.png

Googleで実現できて、Outlookで実現できないので、Outlook特有の仕様の影響だと考えています。

改行は<br>で置換したら改行されるのが確認できました。ただし、全ての特殊な文字コードをHTMLで置換するのは抜け漏れが発生しそうなのと、問題が発生する理由を理解した上で対応したいと考えています。

参考

0

1Answer

結論としては、URLリンク生成を辞め、Zoomと同じくファイルダウンロードで予定登録機能を実装することにしました。
試したことは、改行を正規表現でbrで置換する手段を取りました。ただし、多くの問題が残りました。キャッシュやアカウントにより、結果にばらつきがあります。

■問題1
- 新しくChromeのシークレットウィンドウを開き、検証ツールでApplicationのClear site dataをクリックしキャッシュを削除
- URLリンクを生成
- Outlookに反映される結果は、エンコードされたまま

■問題2
- 問題1の後に同じウィンドウで(キャッシュもそのまま)、2度目のURLリンクを生成
- Outlookに反映される結果は、デコードされ意図した表示になるがスペースや全角のみ、意図した表示にならない

■問題3
- 別アカウント問題2と同じ状況でURLリンクを生成
- 意図した結果が得られた

予定登録機能はZoomを参考にしており、GoogleカレンダーはURLリンクを生成、Outlookカレンダーはics拡張子のファイルをダウンロードして予定を登録する方法を採用していました。これは個人的な推測ですが、ZoomはOutlookのURLリンク生成による予定登録の結果にばらつきがあるため、ファイルダウンロードを採用しているのかもしれないと思いました。このような理由から、OutlookのURLリンク生成による予定登録機能を辞めました。スクリーンショット 2021-03-25 9.30.36.png

0Like

Your answer might help someone💌