顔文字用の<>のエスケープについて

kishidaです。htmlメールで(・ω<)などの顔文字を使用しようとして「<」の部分がhtmlタグとして認識されてしまい正常に表示されないことがあります。 そこで、顔文字をなるべく表示するためにhtmlタグではない<>を特殊文字に置換することにしました。
htmlタグの判別条件として「<」と「>」が対になっているかどうかで分けることにします。

function escTag($str=''){
  if(!$str){
    return false;
  }
  //文字列を分割
  $m = explode('<',$str);
  $str = $m[0];
  foreach($m as $key=>$value){
    if(!$key){
      continue;
    }
    //配列内に対になる>があればエスケープしない
    if(strpos($value,'>')===false){
    $str .= '<';
    }else{
      $str .= '<';
    }
    $str .= $value;
  }

  //文字列を分割
  $m = explode('>',$str);
  $text = '';
  foreach($m as $key=>$value){
    $text .= $value;
    if($key==(count($m)-1)){
      break;
    }
    //配列内に対になる<があればエスケープしない
    if(strpos($value,'<')===false){
      $text .= '>';
    }else{
      $text .= '>';
    }
  }
  return $text;
}

echo escTag('
(・ω<)
');

もっと方法がありそうな気もしますがとりあえずはこれで行きます!

カテゴリー: html, php

コメントを残す

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

*