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が正常に動作しなくなる問題を防止する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

技術情報

前の記事

Laravel Bladeとは?