小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

HTMLで要素の属性値内にクォート文字を書くには

htmlでの要素の属性は「属性名='属性値'」または、「属性名="属性値"」で記述します。
では、属性値の中に「'」または「"」が存在する場合は、どうしたらよいでしょうか?


UNIX系人は「\」付加したり、SQL系の人は「''」とか2つ重ねたりしますね。でも、今回はNGです。
答えは、文字参照*1を使います。

実は、以下も文字実体参照使ったほうがいいようです。

  • 「&」は、「&」
  • 「>」は、「>」
  • 「<」は、「&lt;」

以下は、PerlでのCGIで「&」「>」「<」「"」「'」を文字参照に変換する関数です。お役に立てれば幸いです。

sub htmlf {
    my ($strhtml) = @_;
    $strhtml =~ s/&/&amp;/g;
    $strhtml =~ s/>/&gt;/g;
    $strhtml =~ s/</&lt;/g;
    $strhtml =~ s/"/&quot;/g;
    $strhtml =~ s/'/&#39;/g;
    return $strhtml;
}

このサンプルの関数は、以下を対処します。
たとえば、DBからSELECTしたデータ中にクォート文字とか山括弧文字などある場合、そのデータをHTML出力すると、いろいろと悪さをします。HTML上で悪さをしないように文字参照に変換します。

*1:表記方法により数値文字参照 (Numeric character reference) と文字実体参照 (Character entity reference)の二種が存在する。