PHPのjson_encode()とstr_replace()とは?
PHPのjson_encode()とstr_replace()は、データや文字列を変換するために使用する関数です。
今回の修正では、スケジュールのタイトルや内容に'、"、改行などの特殊文字が含まれている場合に、onclickが正しく動作しない問題を解決するために使用しました。
簡単な処理の流れは以下の通りです。
元データ → json_encode() → str_replace() → JavaScriptで安全に使用
json_encode()とは?
json_encode()は、PHPのデータをJSON形式に変換する関数です。
$title = json_encode($title, JSON_UNESCAPED_UNICODE);
JavaScriptで使用するデータに"、\、改行などの特殊文字が含まれている場合でも、安全に扱える形式に変換します。
JSON_UNESCAPED_UNICODEを指定すると、日本語や韓国語などの文字を\uXXXX形式に変換せず、そのまま保持できます。
str_replace()とは?
str_replace()は、文字列の中から指定した文字を検索して、別の文字に置き換える関数です。
$title = str_replace("'", "'", $title);
上記のコードでは、文字列に含まれている'を'に置き換えています。
今回の修正では、データ内の'とHTMLのonclick='...'で使用している'が衝突しないようにするために使用しています。
修正コード
$info = $calendarList['info'];
$info = json_encode($info, JSON_UNESCAPED_UNICODE);
$info = str_replace("'", "'", $info);
$title = $calendarList['title'];
$title = json_encode($title, JSON_UNESCAPED_UNICODE);
$title = str_replace("'", "'", $title);
修正理由
修正前は、スケジュールのタイトルや内容に'などの特殊文字が含まれていると、onclickの文字列が途中で切れてしまい、JavaScriptが正常に実行されない場合がありました。
そのため、json_encode()でJavaScriptで使用できる形式に変換し、str_replace()で'を置き換えることで、onclickとの衝突を防止しました。
結果
修正前は、特殊文字が含まれているスケジュールを正常に認識できず、既存のスケジュールでも保存として処理される場合がありました。
修正後は、特殊文字が含まれていても既存のスケジュールを正常に認識でき、更新・削除・COPYが正常に動作するようになりました。
まとめ
json_encode():PHPのデータをJSON形式に変換し、JavaScriptで安全に使用できるようにするJSON_UNESCAPED_UNICODE:日本語や韓国語をそのまま保持するstr_replace():指定した文字を別の文字に置き換える- 今回の修正目的:特殊文字によって
onclickが正常に動作しなくなる問題を防止する

