【第8回】ブログ記事内の税込価格を増税後価格に自動変更する方法

消費税増税ブログ
この記事は約9分で読めます。

こんにちは、オイケです。

過去ブログの消費税10%対応プロジェクト第4回目の記事では、

  • WordPressのテキストエディタのhtml内の税込価格を増税後価格に変更するgawkプログラム

を作成しました。

しかし、せっかくPHPを勉強し始めたので、今回の第8回目の記事では、

  • ブラウザの入力フォームに貼り付けたhtml内の税込価格を増税後価格に変更するPHPプロブラム

を作成してみます。

スポンサーリンク

VirtualBox起動

PHPプログラムをXSERVERに転送して、XSERVERでPHPプログラムを実行することもできるようです。

しかし、セキュリティー対策を実施していないPHPプログラムをXSERVERに置きっぱなしにしておくのは心配なので、今回は、仮想サーバーであるVertualBoxを起動して、VertualBoxの環境下でPHPプログラムを実行します。

VirtualBoxマネージャー起動

まずは、Oracle VM VirtualBoxアイコンをダブルクリックして、Oracle VM VirtualBoxマネージャーを起動します。

仮想サーバー起動

起動をクックして仮想サーバーを起動します。

消費税8%の税込価格記事

消費税8%の税込価格記事

上図は、消費税8%の税込価格記事です。

上の記事中の価格は、全て消費税8%の税込価格です。

この記事中の価格を、PHPプログラムを使って、消費税10%の税込価格に変更します。

消費税8%の税込価格記事のhtml

消費税8%の税込価格記事のhtml

上図は、WordPressのテキストエディタで表示したhtmlをCtrl+Cでコピーした画面です。

次に、コピーした内容を、PHPプログラムの入力フォームに貼り付けます。

textarea.php実行画面

textarea

上図は、ブラウザで、http://192.168.56.11/~user01/textarea.php にアクセスして、textarea.phpを実行した画面です。

増税前htmlのフォームに、WordPressのテキストエディタでコピーした内容を、Ctrl+vで貼り付けます。

貼付け後、WordPressのテキストエディタのhtmlを全て削除し、記事が未記入の状態にしておきます。

次に、変換するをクリックすると、下図のとおり、増税後htmlのテキストエリアに、消費税10%の税込価格に変更されたhtmlが表示されます。

入力フォーム

増税後htmlのテキストエリア内にカーソルを置き、Ctrl+cでhtmlをコピーします。

増税前htmlのフォーム内に、あたかも、変換前のhtmlが表示されているように見えますが、よーく見ると、「 」が消えてしまっています。
「 」が消えないように、数日間、PHPコードを色々と変更してみたのですが、解決できませんでした。

消費税10%の税込価格記事のhtml

WordPressのテキストエディタ

上図は、増税後htmlをWordPressのテキストエディタに貼り付けた画面です。

消費税10%の税込価格記事

消費税10%の税込価格記事

上図は、PHPプログラムで変換したhtmlをブラウザで表示した画面です。

フォントタイプ、フォントサイズその他装飾が変わることなく、消費税10%の税込価格に変更されています。

html内の税込価格を増税後価格に変更するPHPプロブラム

以下のコードが、ブラウザの入力フォームに貼り付けたhtml内の税込価格を増税後価格に変更するPHPプロブラムです。

<!DOCTYPE html>
<html lang = "ja">
<head>
<meta charset = "utf-8">
<title>8%->10%税込価格に変更</title>
<style type = "text/css">
<!--
p{color:black;line-height:1.5;}
-->
</style>
</head>
<body>
<div>

<?php
 // テキストエリアに文字が入力されているかのチェック
session_start();
 if(isset($_POST["note"])) {
  $note = $_POST["note"];
 // HTMLタグやPHPタグを削除する
#  $note = strip_tag($note);
  $note_2 = str_replace('&nbsp;', '&amp;nbsp;', $note);
  $cline = htmlspecialchars($note,ENT_QUOTES,'UTF-8');
  $cline_2 = htmlspecialchars($note_2,ENT_QUOTES,'UTF-8');
  $_SESSION["comment"] = $cline_2;
 } else {
  $cline = "";
 }
?>
<p>増税前html</p>
<form method = "POST" >
   <textarea name = "note" <?php echo $_SESSION["comment"]; ?> cols = "90" rows = "20" placeholder = "増税前のhtmlを貼り付けてください"><?php echo $_POST["note"]; ?></textarea>
   <br>
  <input type = "submit" value = "変換する" >
</form>
<br>
<p>増税後html</p>

<?php
// テキストが入力されていれば表示する
 $cline_back = $cline;
 $length = mb_strlen($cline);
 if($length > 0) {
  $pattern = '円';
	$res = "";
#  $newfld = "";
		$match_result = preg_match("/[0-9]円/", $cline);
				if ($match_result == 1) {
// 円を区切りにして、$clineを配列$a[]に入れる。
					$a = explode($pattern, $cline);
					$fldcnt = mb_substr_count($cline, $pattern);
					$newfld = "";
					for($i=0; $i<=$fldcnt; $i++) {
						$fldsent = $a[$i];
						$leng_fldsent = $fldsent;
						$numflag = 0;
						$numpoint = 0;
						$j = mb_strlen($fldsent);
// 円の左側が数字の場合、一番左の数字の位置を探す
						while(($j>0) && ($numflag == 0)) {
							$one_char = mb_substr($fldsent, $j-1, 1);
							if(preg_match("/\,|[0-9]/u", $one_char)) {
								$j--;
							} else {
								$numflag = 1;
							}
						}
						if($numflag == 1) {
							$numpoint = $j;
						}
						$one_char_2 = mb_substr($fldsent, $leng_fldsent -1);
						if(preg_match("/[0-9]/", $one_char_2) != 1) {
							if($i < $fldcnt) {
// 円の左側が数字ではない場合は、増税計算せず、円を追加する。
								$newfld .= $fldsent . "円";
							} else {
// $a[$lfdcnt]の場合は、円を追加しない。
								$newfld .= $fldsent;
							}
						} else {
// 金額の左側の文字を抽出
							$japa = mb_substr($fldsent, 0, $numpoint);
// 現在の税込価格を抽出
							$oldprice = mb_substr($fldsent, $numpoint);
// 税込価格からカンマ記号を削除
							$oldprice_2 = str_replace(",", "", $oldprice);
// 増税後の税込価格を算出
							$newprice = floor($oldprice_2 / 1.08 *1.1);
// 税込価格にカンマ記号を追加
							$newprice2 = number_format($newprice);
							$newfld .= $japa . $newprice2 . "円";
						}
					}
#					$sql_up = "UPDATE wp_posts SET post_content=? WHERE ID=?";
#					$stmt_up = $pdo->prepare($sql_up);
#					$stmt_up->execute(array($newfld,$row["ID"]));
#					$res = "更新 ID= " . $row["ID"] . " " . $row["post_title"];
#					print($newfld);
       		         	}
				else {
					$newfld = 'html内に[0-9]円が存在しません';
	       	         	}
 }
#print $newfld;
?>
   <textarea name = "note2" cols = "90" rows = "20" placeholder = "ここには何も貼り付けないでください"><?php echo $newfld; ?></textarea>
   <br>
</div>
</body>
</html>

 

上のPHPコードを作成するにあたり、以下の本の251ページからの「フォーム処理の基本」に記載されているコードが参考になりました。

まとめ

gawkで作成した、8%税込価格を10%税込価格に変更する環境を、PHPに移植することができました。

今回の記事を作成するにあたり、PHPのフォーム入力に関する知識が少しだけ身に付きました。

しかし、フォーム入力機能があるPHPを一般公開して誰でもアクセスできるようにするためには、十分なセキュリティー対策が必須のようです。

今後は、セキュリティー対策の知識も身に付け、一般公開できて役に立つPHPプログラムを作成できるようになれたらいいなぁと思っています。

今回をもちまして、過去ブログの消費税10%対応プロジェクトを終了します。

 

では、また。

コメント

タイトルとURLをコピーしました