echoしても文字は表示されないのに、emptyがtrueにならない

echoをすると文字は出力されないにもかかわらず、次のコードのようにemptyなどの判定がtrueにならないことがあります。

[参考記事] JISコードでstrlenの文字数が合わない(目視の文字数とstrlenの文字数が異なる)

if(empty($str)){
  return 'empty true';
}elseif($str==""){
  return '=="" true';
}elseif(!$str){
  return '!$str true';
}else{
  return 'empty false / =="" false / !$str false';
}

このとき$strには画面に表示されない文字が含まれていることが考えられます。

バイナリ文字を文字コードで出力すると文字が入っていることがわかります。

echo bin2hex($str);

1b

ASCIIコードでは 0〜31、127が該当します。(9,10,13は空白が表示されます)

ASCIIコードで 1〜8,12,14〜31,127ではtrimでも除去できません。

[参考記事] ASCIIコード表

検証コード

for($i=0;$i<=127;$i++){
  $str = chr($i);
  $str = trim($str);
  echo $i;
  echo "[".$str."]";
  if(empty($str)){
    echo 'empty true';
  }elseif($str==""){
    echo '=="" true';
  }elseif(!$str){
    echo '!$str true';
  }else{
    echo 'empty false / =="" false / !$str false';
  }
  echo "<br />";
}

関連記事

スポンサーリンク

:hover擬似クラスでvertical-alignが無効

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る