XAMPPでローカル環境を用意し、imgタグのsrcの中身を変えるjQuery文をPHPで出力するソースをプログラミングしているとし、ひとつアップロードした画像を保存しているディレクトリまでのパスを以下のような文で作成したとする。

$imageDirectory = PATH_UPLOADS.DS."image".DS;

そして、ajaxで返ってきたデータの内容と、PHPの文字連結でimgのsrcを書き換えるjQuery文を出力する文字列をPHPの出力で以下のようにしたとする。

$html = '$("img").attr("src", "'.$this->imageDirectory.'"+data.image.name);';
// data.image.name => image.jpgとする

この$htmlをajaxの結果の所で任意の場所で出力すればよいと思い、いざechoで吐き出すと、エラーがコンソールで表示していた。

SyntaxError: malformed hexadecimal character escape sequence

シンタックスエラー?エスケープシーケンスとも書かれているので何か文字が問題なのだろうかと確認。

$("img").attr('src', "C:\xampp\htdocs\html\uploads\image\"+data.image.name);

どうやらbannersの後の\(バックスラッシュ)がその後の”(ダブルコーテーション)をエスケープしているために”(ダブルコーテーション)で最後閉じてないよという判断ぽい。そこで、DSはやめて普通にスラッシュを入れることにした。

$imageDirectory = PATH_UPLOADS."/image/";

これで吐き出すとエラーは消えた。なるほど、HTMLやjavascriptなどでurlやsrcに使用するパスを表示する場合はバックスラッシュはエスケープ以外では普通のスラッシュで行った方がよいという事か。DSはPHP側でのディレクトリ処理を行う時にだけにしておこうっと。