[PHP-users 28851] Re: PHPでクッキーに保存した値をJavaで読み込む

Shu Sawada luna @ lunanet.gr.jp
2006年 3月 28日 (火) 02:44:02 JST


さわだです。

> ■PHPで保存する部分
> ===================================
> $name="花子";
> setcookie("name",$name),time() + 7200);
> ===================================

とりあえずこれ、Parse errorになりますよね。
試しているプログラムをコピペするようにするとナイスかと思います。

> ■Javaで表示する部分

更に細かいこと言いますが、Javascriptです。Javaとは別物だと思います。

> ■「document.write("こんにちは",unescape(name));」としたときの結果
> =======================
> こんにちは%B2%D6%BB%D2
> =======================

例によって、PHPでcookieを設定してブラウザのみで読む、ということをやった
記憶がないので間違ったことを言っている可能性があります。ごめんなさい。

それで、この理由は説明するのが大変な気がします。
以下のページが良くまとまってると思います。
http://www.cresc.co.jp/tech/java/URLencoding/JavaScript_URLEncoding.htm
JSPを前提として書いているようですが、この話について言えばまあ関係ないかと。

このページをふまえて、結局PHPではどうすればいいかという話ですが、

$name="花子";
$name = mb_convert_encoding( $name, "UTF-8", "EUC-JP");
setcookie("name",$name,time() + 7200);

みたいにしてcookieを設定してやって、表示ロジックではunescape()ではなく、
上記URLの6章に掲載されている function decodeURL(str) を使ってあげると
良いと思います。

document.write("こんにちは",decodeURL(name));

みたいに。
ただし、このdecodeURL()は、ライセンス的にどうなのかわかりません。
というか、お仕事で使うのは確実にアウトっぽい感じですので、そこら辺は
対価を払うなり自作するなりして何とかする必要があるんじゃないかと思います。
なお、decodeURI(), decodeURIComponent() でも大丈夫といえば大丈夫な気が
するんですが、

$name="一太郎++ ;";

のときに、

document.write("こんにちは"+decodeURI(name)+"<BR>");
document.write("こんにちは"+decodeURIComponent(name)+"<BR>");
document.write("こんにちは"+decodeURL(name)+"<BR>");

をすると、

こんにちは一太郎%2B%2B+%3B
こんにちは一太郎+++;
こんにちは一太郎++ ;

になります。
どれが良いかはお好みで。

と、ここまで書いておいてなんですが、そもそもPHPでページを出力してあげれば
一生懸命Javascriptでcookieを読む必要が無くなるんじゃないかと思うんですが、
それじゃダメなんでしょうか?

	print "<script language=\"Javascript\">\n";
	print "var name=\"" . $_COOKIE["name"] . "\"\n";
	print "document.write(\"こんにちは\"+name);\n";
	print "</script>\n";

みたいな感じで。
僕がこういうことをやったことがないというのは、そもそもJavascriptで
表示しなければならない状況になったことがないから、という理由だったりします。
Ajax方面では必要だったりするんでしょうか…?

-- 
Shu Sawada
http://luna.lunanet.gr.jp/


PHP-users メーリングリストの案内