IEの<input type="image" />対策


input type="image" をクリックしたとき、IEではname属性を送らずに、画像の縦横のサイズを送ってくるので、PHPでname属性が来ることを期待するような作りになっているとハマる。

image_xやimage_yがあるかも込みでハンドルしてもいいけど、name属性を配列にしておくと、
type="submit"でもtype="image"でも同じキーが渡ってくるので楽。

<!-- フォーム1 -->
<form action="" method="post">

    <input type="submit" name="submit" value="送信" />
    <input type="image" name="image" value="画像" />
</form>

<!-- フォーム2 -->
<form action="" method="post">

    <input type="submit" name="submit[dummy]" value="送信" />
    <input type="image" name="image[dummy]" value="画像" />
</form>

<?php

var_dump($_POST);

// フォーム1

    // Chrome + submit
    // array(1) { ["submit"]=> string(6) "送信" }

    // Crhome + image
    // array(3) { ["image_x"]=> string(2) "16" ["image_y"]=> string(1) "4" ["image"]=> string(6) "画像" }

    // IE8 + image(ここでたいていハマる)
    //array(2) { ["image_x"]=> string(2) "12" ["image_y"]=> string(2) "25" }

// フォーム2

    // Chrome + submit, IE8 + submit
    // array(1) { ["submit"]=> array(1) { ["dummy"]=> string(6) "送信" } }

    // Chrome + image
    // array(1) { ["image"]=> array(1) { ["dummy"]=> string(6) "画像" } }

    // IE8 + image
    // array(1) { ["image"]=> array(1) { ["dummy"]=> string(2) "20" } }