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('¥',$convmap,'UTF-8');
// HTMLエンティティに変換
//
// &→&
// "→"
// '→'
// <→<
// >→>
$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>"1箱"<¥1,000.->'お得'</p>
省略
--
↓
--表示--
"1箱"<¥1,000.->'お得'
--
htmlspecialchars($str,ENT_QUOTES)が、今回の味噌でした。'もHTMLエンティティに変換することによって、D/Bから呼び出したあとHTML部分で簡便に利用できるようになりました。
P.S. 子猫の手では、半角円記号の統一を行います。ただ今、最終テストしています。このブログは、半角円記号の統一を行っています。ここに表示されている半角円記号は、すべて、¥なので、あしからず。
副作用として、半角バックスラッシュが表示できなくなります。ホームページ作成機能において、HTMLタグで半角バックスラッシュを表示することはできます。
P.S.2 プログラミング記述をコピー&ペーストして使用すると問題が起きますね。統一するしないを選択できるようにします。
http://neconote.jp/php/yen_uni.php