goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

日付などの0埋めあれこれ

2013-10-31 16:24:08 | JavaとWeb
日付が、たとえば2013年5月6日のような場合、

20130506

という風に月、日の前に0を埋める。
このようなときの注意点あれこれ




■【日付のみ】Datepickerは日付、フォーマットチェックしない。

DatePickerのdateformatを指定しても、
かならずしも、そのフォーマットで受け取れるとは限らない。

DatePickerが出ているのに、そのDatePickerをまったく無視して、
入力欄に不正の文字をいれてしまうと、その入力を受け取ってしまう。

例えば、

http://jqueryui.com/datepicker/

のview sourceで出てくるソースを以下のように修正し、

<!doctype html>
<html>
<head>
  <title>jQuery UI Datepicker</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css" />
  <script>
  $(function() {
    $( "#datepicker" ).datepicker({
	dateFormat: "yy/mm/dd"
    });
  });
function getdate()
{
	val = $( "#datepicker" ).val();
	alert(val);
}
  </script>
</head>
<body>
 
<p>Date: <input type="text" id="datepicker" /></p>
<BUTTON onclick="getdate()">日付</BUTTON>
 
 
</body>
</html>


でたらめな日付を入れて、

「日付」ボタンをクリックすると

ちゃんと値が取れる=入ってしまっている。

つまり、Datepickerは入力支援をしてくれるだけであり、
入力値の保証は無いみたいに見える。




■if文で10以下なら0をつける場合

比較するとき、完璧に数字で比較しているならいいんだけど、
文字で"10"と比較してしまうと、
6は、10より「小さい」数字だけど、
6は、10より「大きい」文字なので(6と1を比較するので、6のほうが大きい)
となり、大小関係がおかしくなる。
たとえば、

<!doctype html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
function chk()
{
val = $( "#id1" ).val();
if ( val > 10 )
{
alert(val+"は10より大きい数");
}
else
{
alert(val+"は10よりちいさい数");
}
if ( val > "10" )
{
alert(val+"は10より大きい文字");
}
else
{
alert(val+"は10よりちいさい文字");
}
}
</script>
</head>
<body>
<p><input type="text" id="id1" name="id1" /></p>
<BUTTON onclick="chk()">チェック</BUTTON>
</body>
</html>

で、6とか入れてみると判る。

このように数字と文字を10,"10"と明示してある場合には
間違えないが、これを変数に入れてしまったりしたときに、
気がつかないことがありえる。




■キレイな0うめ

ここで、キレイな0埋めの例を見たので、メモメモ。


【JavaScript】ゼロパディング(ゼロ埋め)
http://www.ore-memo.com/447.html


val = 9; // 9にち
val = ("00"+ val).slice(-2);

0埋めしたい最大数分0をたし、桁数分-で値を入れる。
今回は2桁なので、00と-2

こうすると、1234のように、もともと幅が長い場合は34のように
下2桁が切られるが、ちゃんと2桁になる。

サンプル

<!doctype html>
<HTML>
<head>
<script>
function zero2(val)
{
return ("00"+val).slice(-2);
}
</script>
<body>
<Button onclick="alert(zero2(12))">12</BUTTON><BR>
<Button onclick="alert(zero2('2'))">2</BUTTON><BR>
<Button onclick="alert(zero2(''))"></BUTTON><BR>
<Button onclick="alert(zero2(1234))">1234</BUTTON><BR>
http://www.ore-memo.com/447.html
</body>
</html>




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

1つの画面で複数の文字コードの内容を表示する-IE以外なら可能

2013-10-31 12:31:57 | JavaとWeb
ある画面がSJISないしUTF8で、その画面にLinuxのログを表示したい。
LinuxのログはEUC-JP
なんていう場合、1つの画面に、SJISとEUCのように、複数の文字コードを
表示しないといけないことになる。

これは、可能なのか?

結論から言うと

・ログのようなテキストファイルを送る場合、
  IE以外なら可能

・IEの場合は、
  サーバ側で「Content-Type:」で文字コードを指定できないとX
  →つまり、テキストでは、そういうことができない(たぶん)。
   PHPとか、JSP,サーブレットなどで処理する必要がある




■基本的方針

 IFRAMEを使うと、IFRAMEの中に、文字なりHTMLを書き出すことが出来る。
 そこで、この

    IFRAMEの中の文字コードをSJISに変えれば、SJIS文字列が
    IFRAMEの中の文字コードをUTF8に変えれば、UTF8文字列が
    IFRAMEの中の文字コードをEUCに変えれば、EUC文字列が

 表示できるはずです※・・・めでたしめでたし・・・


 ・・・とはならないのです。
 この文字列をajaxを使って受け取り、表示させようとすると、
 なぜか勝手に、UTF-8と思って処理してくれます。
 なので、UTF-8以外のコードの文字列では、おかしな文字に変換されてしまいます。

 この変換を、断固として、阻止しなければなりませぬ!

※なお、EUC以外のSJIS,UTF-8は、IFRAMEのSRCに指定すると、IEでもChromeでも判断して
  表示してくれる




■どこで、判断しているのか?

どうも、変換してしまうのは、ヘッダーの

     Content-Type: text/html;charset=shift-jis

のところの指定が、ないからのようです。
そりゃー、テキスト表示してるんですから、ここは、操作できませんもんね。

なので、ここを、強制的に

beforeSend: function(xhr){
xhr.overrideMimeType("text/html;charset=EUC-JP");
},

と送ってしまい、その内容を表示させればいいようです
・・・・IE以外は・・・




■でもIEは・・・

ここがうまく行かないようです。
なので、現状、UTF-8でしかいきません。
IEで、うまく表示させるには、
サーバー側で、
     Content-Type: text/html;charset=shift-jis
を送らないといけないということですかね・・・




■サンプルコード

<html>
<head>
<script type="text/javascript" 

src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
<title>インラインフレーム内に文字を表示する</title>
<script language="JavaScript"><!--
$(function(){ 
	$.ajax({
		type:"POST",
		url: "sjis.txt",
		datatype:"text",
		beforeSend: function(xhr){
     			xhr.overrideMimeType("text/html;charset=Shift_JIS");
		},
		success: function(msg){
			myFrame1.document.open();
			myFrame1.document.charset='Shift_JIS';
			myFrame1.document.write(msg);
			myFrame1.document.close();
 		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			alert(errorThrown);
		}
	});

	$.ajax({
		type:"POST",
		url: "utf8.txt",
		datatype:"text",
		beforeSend: function(xhr){
     			xhr.overrideMimeType("text/html;charset=UTF-8");
		},
		success: function(msg){
			myFrame2.document.open();
			myFrame2.document.charset='UTF-8';
			myFrame2.document.write(msg);
			myFrame2.document.close();
 		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			alert(errorThrown);
		}
	});

	$.ajax({
		type:"POST",
		url: "euc.txt",
		datatype:"text",
		beforeSend: function(xhr){
     			xhr.overrideMimeType("text/html;charset=EUC-JP");
		},
		success: function(msg){
			myFrame3.document.open();
			myFrame3.document.charset='EUC-JP';
			myFrame3.document.write(msg);
			myFrame3.document.close();
 		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			alert(errorThrown);
		}
	});

}); 
// --></script>
</head>
<body>
<H1>文字コードが違う場合(このページはSJIS)</H1>
<iframe name="myFrame1" width="320" height="240"></iframe>
<iframe name="myFrame2" width="320" height="240"></iframe>
<iframe name="myFrame3" width="320" height="240"></iframe>

</body>
</html>




なお、「document.charset」は、それをしてもだめだめということを
示すためにやっているだけで、その行を削除しても、以下の表示は
変わらない(つまり、
myFrame1.document.charset='Shift_JIS';
myFrame2.document.charset='UTF-8';
myFrame3.document.charset='EUC-JP';
の3行は不要)。

このコードのほかに、このコードと同じフォルダ(ディレクトリ)に
SJISで書いたsjis.txt
EUCで書いたeuc.txt
UTF-8で書いたutf8.txt
の3種類のファイルを用意する(その内容が書き出される)




■結果

Chrome

IE



参考サイト
インラインフレーム内に文字を表示する
http://www.openspc2.org/reibun/javascript/frame/007/index.html


複数の文字コードをformからCGIへ送信する方法
http://search.web-sun.com/zatu/charset.html


jQuery.ajax で overrideMimeType する方法Add http://d.hatena.ne.jp/teramako/20080913/p1

AjaxでShift_JISのファイルを取得する
http://www.polidog.jp/2010/06/07/ajax%e3%81%a7shift_jis%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Gooメールを有料版にしてみた!

2013-10-31 09:49:58 | トピックス
で、話は長かった!

gooの有料版メールを申し込もうとして、ちょコムでハマった件
http://blog.goo.ne.jp/xmldtp/e/c3aef30eaba9558d5d32a1549c8db9f6

を、永遠やっていたのは、Gooのメールを有料版にしようとしたためだった!
有料版にしてみる

なお、「gooの有料版メールを申し込もうとして、ちょコムでハマった件」は
xmldtpとは別のアドレスだったが、今回は、xmldtpでやっている。




■まずは、どうでもいい画面を見てくれ!

じゃあ、Goo有料版を申し込もう!
だが、申し込みに行くまでが長かった(もっと短い道がキットあるはず!)

まず、gooメールをひらく

「詳しくはこちら」をクリックしてみて見ましょう!

Gooメールの利用継続を検討されているお客様(いちばん左)
になりそうです。「詳しくはこちら」をクリック

「有料版への変更をご検討のお客様へ」をクリック

「お申し込みは、こちら」をクリック




■申し込む!

やっときた!

メールだけでなく、ブログのほうもやるので、
「Gooアドバンスパッケージ」の「今すぐ申し込む」を
クリックしました。メールだけなら、メールアドバンス
だけでいいよね。

とかいうのが「パッケージの場合」でる
(たしか、メールのみだとない)。スライドバーで下に行くと


「規約に同意して申し込む」をクリック

とでてくる。スライドして下に行き

次へ

とでてくる。ちょコム決済にしているので
(いや、このためにわざわざ、長い道のりを・・・)
スライドして下へ・・

決済パスワードをいれて「購入する」

利用するをクリック

というアドバンスパッケージトップ画面にいく

ここでGooメールに入りなおすと

[あなたは有料版ユーザーです]になっている。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする