技術者派遣の技術日誌ブログ

September 30, 2007

How To C#でTrackback Ping

Filed under: C# — Tags: , , , — citiszo @ 12:43 am

を参考にTrackbackを打つプログラムをC#で書いてみた。日本語周りは良く分からないのでパス。
http://lowlife.jp/yasusii/stories/8.html
http://ukamen.hp.infoseek.co.jp/Programming1/HTMLPost/#SEC4
blogプログラムを作る人とTrackback Spamを打つ人以外には全く役に立ちませんが。

using System.Net;
using System.IO;
を仮定。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("送信先");request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";//送信元設定string parameters= "title=CSharpDetrackbackping&" +"url=http://function.ameblo.jp/entry-f8b83a590eb54b0e25e93495be44e708.html&" +"excerpt=abcdefghijklmnopqrstuvwxyz&" +"blog_name=function";Stream st = request.GetRequestStream();StreamWriter sw = new StreamWriter(st);sw.Write(parameters);sw.Close();WebResponse response = request.GetResponse();Console.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());

September 29, 2007

[FAQ]SetColumnError するとバインド先の TextBox の表示内容がおかしくなる

Filed under: ALL — Tags: — SixYo @ 7:29 pm

ASP.NET AJAX Control TooKits Slider Extender のイベントハンドラを設定する。

Filed under: Ajax, Asp.Net, C#, Javascript/Xhtml/Css — Tags: , , — Sayuri @ 5:05 am

Slider Extender のつまみをドラッグしたときにだけ現在の値を表示したいという要望。

まず Extender に対するイベントにどんなものがあるのかを確認します。
Extender のソースを見るのが一番楽なんだけれど、 AJAX Class Browser をダウンロードして、該当の Extender をプロジェクトに読み込ませるという方法もあります。
たとえばマスターページに Slider Extender をドロップしてから AJAX Class Browser を表示するとこんな風に表示されます。

画像

これを見ると Slider Extender には 4 つのイベントが存在するようです。

ASP.NET AJAX Control Toolkit Animation Extender で遊んでみる その3

Filed under: Ajax, Asp.Net, C#, Javascript/Xhtml/Css — Tags: , , — Sayuri @ 5:03 am


Animation Extender ではイベントの子ノードに記述されたアニメーションを一つ実行します。
複数実行するにはどうしたらいいでしょうか。
Animation Extender で一つのアクションに複数の動作を定義する場合2つのアニメーションが存在します。
定義した動作を上から順に行っていく Sequence と 並列に動作する Parallel の二つです。

Sequence の例はこのようになります。
この例ではパネルの OnHoverOver のタイミングで、
1.パネルの大きさを変更し、
2.背景色を黒から赤に変化させ
という2つの動作を順に行います。


Ajax対応コントロールでJavaScriptレス アニメーションを実装する

Filed under: ALL, Ajax, Asp.Net, Javascript/Xhtml/Css — Tags: , , — Sayuri @ 5:01 am

CodeZine にて ASP.NET 2.0 AJAX Extensions に関する記事を投稿させて頂きましたが、今日 ASP.NET AJAX Control Toolkit の中でも扱いが特殊な AnimationExtender コントロールに関する記事を投稿させて頂きました。

ASP.NET GridView の Template 列を動的に作成する

Filed under: Asp.Net, C# — Tags: , , — Sayuri @ 5:00 am

// aspx.cs

private void GridViewDataBind()
{

PHPとJavaScriptのURIエンコードを比較

Filed under: ALL — Tags: , , — AspAnn @ 4:59 am

Ajaxでは、サーバーからデータを受信する際、生のテキスト文字列を使用すると、 responseText,responceXMLそれぞれに文字化けするブラウザがあります。[ 参考:->文字化け調査 ]

これは、Ajaxでの送受信時には、Formの時のようにブラウザが自動でURIエンコード/デコードをしてくれるわけではない、ということに起因すると言えるかもしれません。

一般的には、Formの動作に見られるように、URIエンコードして送受信することで、安全でない文字などが引き起こす、いろいろな問題を回避しようとするわけです。(AjaxでGETやPOSTでの送出時は、ブラウザが自動ではエンコードしてくれない以上、プログラマーの義務ではないかという気がしています。POSTならsetRequestHeader()で、GETなら自前で、、、。)この時、使えるメソッドとして、JavaScriptには、escape()、encodeURI()、そして、encodeURIComponent() があります。

このうち、escape()は、古いメソッドで、ブラウザにより実装が異なるため使わない方が安全です。残りの、encodeURI()とencodeURIComponent()は、ECMAScriptの仕様に従ったメソッドで、現在流通しているブラウザなら共通に動作するはずです。

ありがたいことに、この2つのメソッドは、ページのcharset(Shift_JIS,EUC,UTF-8,,,)が何であっても、UTF-8としてエンコードしてくれます。つまり、「Shift_JISからEUCへ」など異なったcharset環境間でデータを受け渡す場合にも必ず「UTF-8」として明示的にエンコードされたデータとして受け渡せるので安心です。

したがって、もし、サーバーから静的ファイルを取ってくるだけなら、JavaScriptのURIエンコードメソッドで変換した文字列をサーバーにおいておけば、JavaScriptによるAjaxでの受信は、どのブラウザでも同じ種類のデコードメソッドを使えるので文字化けしなくなります。

ところが、サーバーから動的に受信する場合は、あらかじめJavaScriptによるエンコードができません。つまり、サーバー側のPHPなど他の言語でURIエンコードされたものをJavaScriptでデコードしないといけないのです。でも、URIエンコードの実装は、実は、言語によって異なっています。。。そこで、他の言語でのエンコードとJavaScriptエンコード、そしてデコードの違いを実際に確認してみます。今回はPHPです。

もし、問題なくAjaxで受信してデコードされるならそれを使えば良いし、もし、多少の違いがあるなら、そこを修正すれば良いと、いうわけで、、。

比較する文字列

;/?:@&=+$%-_!~*{}[].,()”あa^# '

(#の後ろに空白文字があります)


PHP

$data  = ';/?:@&=+$%-_!~*{}[].,()"あa^# '."'";mb_http_output ( 'UTF-8' );$data = mb_convert_encoding($data,"UTF-8",mb_internal_encoding());$html  = "urlencode() : ".urlencode($data);$html .= "rawurlencode() : ".rawurlencode($data);echo($html);

urlencode() :
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23+%27
rawurlencode() :
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23%20%27

–>PHPがエンコードしない文字列

-_.a

注意:urlencode()は、空白文字を「+」に変換し、rawurlencode()は「%20」に変換するという違いがあります。


JavaScript

var data = ';/?:@&=+$%-_!~*{}[].,()"あa^# '+"'";var enchtml = 'encodeURI() : '+encodeURI(data)    enchtml + 'encodeURIComponent() : '+encodeURIComponent(data)document.write(enchtml)

encodeURI() :
;/?:@&=+$%25-_!~*%7B%7D%5B%5D.,()%22%E3%81%82a%5E#%20'

–>encodeURI()がエンコードしない文字列

;/?:@&=+$-_!~*.,()a#'

encodeURIComponent() :
%3B%2F%3F%3A%40%26%3D%2B%24%25-_!~*%7B%7D%5B%5D.%2C()%22%E3%81%82a%5E%23%20'

–>encodeURIComponent()がエンコードしない文字列

-_!~*.()a'

結論1

 つまり、PHPとJavaScript(ECMAScript)のURIエンコードは、違うのです。
では、デコードするとどうなるでしょう?


デコード : PHP urlencode() → JS decodeURIComponent()


PHP urlencode()でエンコード
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23+%27

JS decodeURIComponent()でデコード
;/?:@&=+$%-_!~*{}[].,()”あa^#+'

–>encodeURIComponent()はエンコードしないが、decodeURIComponent()がデコードした文字列

!~*()'

(-_.aは、PHP がエンコードしません。)

おお、encodeURIComponent()でエンコード出来なかった文字までデコード出来てる!

てことは、PHP–>JS なら、「utf-8化してurlencode()」–>「decodeURIComponent()」で、使えるのでしょうか?
うーん、、、でも、これって、ECMAの仕様的にOKなんでしょうか?よくわかりません、、、。

この組み合わせの場合、最大の問題は、urlencode()によって「+」に変った空白文字がそのままなため普通の「+」と区別がつかなくなること。 ということで、次は、空白文字をencodeURIComponentと同じ「%20」に変換する、rawurlencode()で試してみましょう。


デコード : PHP rawurlencode() → JS decodeURIComponent()


PHP rawurlencode()でエンコード
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23%20%27

JS decodeURIComponent()でデコード
;/?:@&=+$%-_!~*{}[].,()”あa^# '

–>encodeURIComponent()はエンコードしないが、decodeURIComponent()がデコードした文字列

!~*()'

(-_.aは、PHP がエンコードしません。)

おお、こんどこそデコード出来てる!
、、、他に問題ないかなぁ、、、(^^;。


結論2

 PHPは、 utf-8化 + rawurlencode() → JS decodeURIComponent() この組み合わせで、行けそうかも

VS 2008 上では ASP.NET 3.5 でなければ AJAX が利用できない

Filed under: C# — Tags: , — citiszo @ 2:08 am

VS 2008 の新機能の1つとして .NET Framework 2.0~3.5 までを選択してプロジェクト(Web サイト)を作成するマルチターゲッティングがあります。

選択したバージョンによって .NET Framework のバージョンが変更される以外に、テンプレート、コントロール、新しい項目の追加に含まれているテンプレートが変更されます。

ASP.NET AJAX Control Toolkit Ver.10920 リリース

Filed under: Ajax, Asp.Net — Tags: , — Sayuri @ 2:07 am

AJAX Control Toolkit 10920 Released!

Community ServerでPrivate ForumのRSS配信を有効化する

Filed under: ALL — Tags: — Sayuri @ 2:04 am

質問

Community Server 2.1でフォーラムのRSSフィードを有効にするにはどうすればいいですか?

回答

Community Server 2.1では、Everyoneロールに参照が設定されている
フォーラムのRSSフィードは規定でOnになっています。
しかし、それ以外 – たとえばあるユーザー達だけ

Older Posts »

Powered by WordPress