【PHP】POSTで「改行」を含むデータを受け取り「改行」を含めて表示する【Part.1】

題名の通りですが、POSTで「改行」を含むデータを受け取り、「改行」を含めて表示する方法です。

Excel のデータを貼り付けて Web ページに表示するようなことを想定しています。

 

 

Excel 上のデータをコピ-して Web アプリ上にペーストしてデータを取り込みたい

Web アプリにデータを取り込む手段はいろいろありますが、私が開発したい Web アプリは Excel ファイルをコピペしてデータを取り込むようにしたいと考えています。

その理由は

だからです。

 

例えば下図のようなデータを想定しています。

 

 

 

 

textarea でデータを取り込む

textarea でデータを取り込みます。

[root@cent07 html]# vi post.php
<!DOCTYPE html>
<html>
<body>
<form method="POST" action="ResPost.php">
Excelデータをコピペしてください。:<br>
<textarea name="comments" cols="50" rows="10" /></textarea><br>
<input type="submit" value="送信" />
</form>
</body>
</html>
[root@cent07 html]#

 

 

表示する際は「nl2br」「テキストエリア」「改行」「<br>」に変換させます。

[root@cent07 html]# vi ResPost.php
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8' />
<title>Sample</title>
<body>
Excel データ<br>
<?php $data = $_POST['comments']; ?>
<?php echo nl2br($data); ?>
<br>
です。<br>
</body>
</head>
</html>
[root@cent07 html]#

 

 

 

Web プログラムを実行する

Excel のデータをコピーします。

 

Web アプリのテキストエリアに貼り付けて「送信」ボタンをクリックします。

 

 

以下のようにデータが改行されています。

更にスペースも入っているので1つ1つのデータを取り出すことが出来そうです。

 

表示結果の隙間は「空白」か?「Tab」か?

上図の表示結果で「値」「値」の間に隙間がありますが、これは「空白」なのか「Tab」なのか確認します。

 

上図の結果をコピーして「エディタ」に貼り付けて確認しました。

その結果「値」と「値」の隙間は「Tab」で区切られていることが分かりました。

 

 

これで「Tab」ごとに値を取り出して変数に代入したり、データベースに格納したりしていろいろと利用できるようになります。

 

 

更にタブ区切りのデータを配列に格納する

更にタブ区切りのデータであることが分かったので explode 関数でタブ区切りを試します。

タブ区切りしたデータを「print_r」「var_dump」で出力します。

[root@cent07 html]# vi ResPost.php

<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8' />
<title>Sample</title>
<body>
Excel データ<br>
<?php $data = $_POST['comments']; ?>
<?php echo nl2br($data); ?>
<br>
タブ区切り「print_r(explode("\t", $data));」の場合<br>
<?php print_r(explode("\t", $data)); ?><br>
<br>
タブ区切り「var_dump(explode("\t", $data));」の場合<br>
<?php var_dump(explode("\t", $data)); ?><br>
<br>
</body>
</head>
</html>

 

 

プログラム実行結果

 

 

数がプログラムの実行結果ですが、よく見ると「改行」でデータが分割されていません。

 

目標は下図の Excel の表のように二次元配列で出力させることです。

 

 

 

Excel データを二次配列に格納するプログラム

最終的に以下のように Excel のデータをコピペして二次元配列に格納するプログラムを作成しました。

[root@cent07 html]# vi ResPost.php
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8' />
<title>Sample</title>
<body>

<?php
echo "Excel データ<br>";
$data = $_POST['comments'];
echo nl2br($data);
echo "<br>";

 

echo "「print_r」の場合<br>";

print_r(explode("\t", $data));
echo "<br>";
echo "<br>";

 

echo "「var_dump」の場合<br>";

var_dump(explode("\t", $data));
echo "<br>";
echo "<br>";

 

echo "splitで分割して配列に代入する<br>";
$array=split("\n", $data);
var_dump($array);
echo "<br>";
echo "<br>";

 

$two_ary = array(array());

for ($i=0; $i<count($array); $i++){
  $two_ary[$i] = explode("\t", $array[$i]);
}

echo "<br>";

 

echo "var_dumpで two_ary を表示<br>";
var_dump($two_ary);

echo "<br>";

 

echo "for で二次元配列 $two_ary を表示<br>";
  for ( $i=0; $i<count($two_ary); $i++ ){
    for ( $j=0; $j<count($two_ary[$i]); $j++ ){
    print $two_ary[$i][$j] . "<br>";
  }
}

?>
</body>
</head>
</html>

 

 

Excel のデータをコピーします。

 

データをコピペして「送信」ボタンをクリックします。

 

 

以下のように出力されます。

ただし「Notice: Array to string conversion in /var/www/html/ResPost.php on line 40」のメッセージが出力されました。

「Error」や「Warning」ではありませんが、軽い注意ということでしょうか。

 

Notice: Array to string conversion in /var/www/html/ResPost.php on line 40

「Notice: Array to string conversion in /var/www/html/ResPost.php on line 40」の原因について調べたところ、「空行が混ざっているのが原因」であることが分かりました。

 

Ecxel のデータを選択してコピペした時に、下図のスペースに空行が1つ入っていました。

 

 

var_dumpで確認すると、確かに一番最後に空の配列が入っていることが確認できます。

 

この空行を二次元配列に入れないようにするように改修します。

→続きます。

 

参考サイト

PHPで文字列を分割する2つの方法(特定の文字列で区切る-explode)

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人