ガレコレ
Garage Collection
 
2016年2月24日(水)
¥半角円記号の統一 #■子猫の手

 一晩寝たら、頭が切り替わっていたようで、朝の配達の時間が長いと感じられました。医学的に実際はどうなのか分かりませんが、左脳活性期間の初日になったと考えています。

 今回は、自分が通常感じている2週間ごとの左脳と右脳の切り替えでは無く、昨日、右脳活性では問題解決できなかったので、突如、左脳活性に切り替わったようです。

 そんなこんなで、¥半角円記号の統一に取り組んだら、あっという間に解決しました。備忘録として、手順を公開します。

【ステップ1】
 文字コードUTF-8を利用すると、Windowsで入力した半角円記号が、iPhoneでは半角バックスラッシュで表示されます。おのおのの入力した半角円記号は、数字(HTML数値エンティティ)で表すと下記のようになります。

・\ Windows
・¥ iPhone

【ステップ2】
 Windowsで入力した¥半角円記号を、iPhoneで表示される¥半角円記号に置換することにしました。iPhoneで入力した¥半角円記号は、そのままスルーです。

 ASCIIコードから文字に変換するchr()関数は、引数に127(0x7f)までしか対応していません。chr(0x5C)は良いのですが、chr(0xA5)はできません。そこで、mb_decode_numericentity()を用いました。

--
<?php

mb_language("Japanese");
mb_internal_encoding("UTF-8");

$str = '"1箱"<¥¥1,000.->¥'お得¥'';

// 置換する半角円記号を定義

$convmap = array(0x0,0xffff,0,0xffff);
$yen = mb_decode_numericentity('&#xA5;',$convmap,'UTF-8');

// HTMLエンティティに変換
//
// &→&amp;
// "→&quot;
// '→&#039;
// <→&lt;
// >→&gt;

$str = htmlspecialchars($str,ENT_QUOTES);

// 半角円記号に変換(統一)

$str = str_replace(chr(0x5C),$yen,$str);

// D/B用に変換
//
// '→¥'
// "→¥"
// ¥→¥¥

// $str_db = addslashes($str);
// ※すべて、上記で変換しているので不要。
// D/B格納のプログラムは、省略

echo '<!DOCTYPE html>

<html lang="ja">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width">

<title>半角円記号の統一</title>

</head>



<body>

<p>'.$str.'</p>

<hr><hr>

<br>
<br>
<br>

</body>

</html>';

?>
--

--HTMLタグ--
省略
<p>&quot;1箱&quot;&lt;¥1,000.-&gt;&#039;お得&#039;</p>
省略
--

--表示--
"1箱"<¥1,000.->'お得'
--

 htmlspecialchars($str,ENT_QUOTES)が、今回の味噌でした。'もHTMLエンティティに変換することによって、D/Bから呼び出したあとHTML部分で簡便に利用できるようになりました。


P.S. 子猫の手では、半角円記号の統一を行います。ただ今、最終テストしています。このブログは、半角円記号の統一を行っています。ここに表示されている半角円記号は、すべて、&#xA5;なので、あしからず。

 副作用として、半角バックスラッシュが表示できなくなります。ホームページ作成機能において、HTMLタグで半角バックスラッシュを表示することはできます。


P.S.2 プログラミング記述をコピー&ペーストして使用すると問題が起きますね。統一するしないを選択できるようにします。
http://neconote.jp/php/yen_uni.php
 
お問い合わせ

Warning: pg_query(): Query failed: ERROR: duplicate key value violates unique constraint "gc_counter_pkey" in /home/vps100824749/public_html/index.php on line 1313

Warning: pg_affected_rows() expects parameter 1 to be resource, boolean given in /home/vps100824749/public_html/index.php on line 1314
error: insert into counter