syntax errorの正体は不可視文字だった


よくあることなのだろうか?
厄介なトラブルなのでメモっとく。

WordPressでテンプレートを編集していた。
画像が存在する場合はそれを表示して、存在しない場合はダミー画像を表示する。
下記のようなコードを書いた:

// プログラム画像
$img_url = '';
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] ."/images/{$pg_number}.jpg";

if ( file_exists( $file_path ) ) {
      $img_url = home_url( "/images/{$pg_number}.jpg" );
} else {
      $img_url = home_url( "/images/dummy.jpg" );
}

特段難しいことではないし、コードもシンプル。
だが、なぜかfile_existsの行でsyntax errorになる。

file_exists Fatal error: syntax error, unexpected '' (T_STRING), expecting ')'

file_existsに渡っている値がおかしいのか、そもそも使い方が間違っているのか、など小一時間Webを彷徨ってたどり着いたのは、不可視文字によるいたずら(?)だった。

file_existsの行をカーソル移動していくと、$file_pathの後の閉じ括弧の手前で、カーソルが足踏みする…二度点滅する。Codaで不可視文字を表示しても何も表示されない(画像ほぼ中央)。

この時点で不可視文字のせいだと気づいたので、Shift+矢印キーで選択&コピーし、Macの文字ビューアにペーストしてみると

OBJECT REPLACEMENT CHARACTER
Unicode: U+FFFC, UTF-8: EF BF BC

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1240887022
…日本語だと「〓」みたいなものらしい。表示はできないが、そこに文字はある。

どこかからコピペした記憶もないのだが、どこで混じってしまったのだろう。。。
不可視文字による不具合は過去何度か経験しているが、「不可視文字を表示」しても見えないやつに遭遇したのは初めてだ。
厄介なのは、手元のローカル環境ではとくに不具合は出なかったのに、サーバにアップしたらsyntax error発生。
むしろそれがヒントだったのか?

カーソル合わせて、deleteで解決。