fgetcsvで読み込んだCSVファイルをhtmlのテーブルとして出力

タイトルどおり、fgetcsv関数で読み込んだCSVファイルをテーブルにします。
PHPの動くサーバに設置してローカルのファイルを求める仕様です。サニタイジングを省略しているので公開領域には置かないでください。

csvtotable.php
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h2>テーブル表示するcsvファイルを指定して下さい。</h2>
<form enctype="multipart/form-data" action="csvtotable.php" method="POST" />
<input type="file" name="csvfile" accept="application/excel" />
<input type="submit" value="送信" />
</form>
<br />
<?php
if(isset($_FILES["csvfile"])){
if($fp = fopen($_FILES["csvfile"]["tmp_name"],r)){
echo '<table border = "1">';
while(($row = fgetcsv($fp)) != false){
echo "<tr>";
for($i = 0; $i < count($row); $i++){
echo "<td>" . mb_convert_encoding($row[$i],"UTF8","SJIS-win") . "</td>" ;
}
echo"</tr>";
}
echo "</table>";
}
}
?>
</body>
</html>

エクセルで作成されたShift-JISのCSVファイルを読み込むという設定で、fgetcsvで読み込んだ値をいちいちmb_convert_encoding関数でShift-JISからUTF-8に変換して表示しています。この関数は引数1に変換対象の文字列、引数2に変換後エンコーディング、引数3に変換元エンコーディングを与えるのですが、変換元としてただのShift-JISを与えたケースでは、”かっこかぶ”やローマ数字などが表示できませんでした。SJIS-winと指定するのが正解なようです。
なお、このプログラムで上手く表示できない場合は前回説明したような問題が発生している可能性もあります。記事を参考にしてあたりをつけてみて下さい。


fgetcsvで読み込んだCSVファイルをhtmlのテーブルとして出力」への2件のフィードバック

  1. ピンバック: フォーム入力のサニタイジングを行う(PHP編) | AkisiのWEB制作日記

  2. ピンバック: Conceptual:Ajax対応CSV表示プログラムOnlyCSViewを計画する | AkisiのWEB制作日記

コメントを残す

メールアドレスが公開されることはありません。