プロが教える店舗&オフィスのセキュリティ対策術

XFormsとやらを実験してみたくなり
X-Smilesを用いて見た。

事前にXFormsとは関連の無い
自分が書いたソース
(拡張子.xml,Content-Type:application/xhtml+xml)
を読み込ませたところ
UTF-8で書いたものが、
ISO-8859-1で読み込まれた。
(ただし、DOCTYPE宣言があるとエラー。)
なお、この際、ソースでは、
日本語の部分は数値文字参照に変換されていて
正常に見られた。

さて、
XFormsで送られてきたデータをperlによるcgiに送った。
多分XHTMLやHTMLの書式と同じだと思います。

(例)
http://hogehoge.net/hoge.pl?Name=himajin;Passwor …
(XForms 1.0 仕様書にXMLデータとして受け渡される・・・みたいなこと書いてあった気がするんだけど
いい加減に読みすぎたかな・・・?)

上記xmlでは日本語が自動的に変換されていたので
formから送られてきたデータをURLデコードして
そのまま表示させようとしたが
----------------------
Invalid byte 1 of 1-byte UTF-8 sequence.java.io.UTFDataFormatException:
Invalid byte 1 of 1-byte UTF-8 sequence.

at org.apache.xerces.impl.io.UTF8Reader.invalidByte(Unknown Source)
(以下略)
-------------
というエラーが出た。
よくわからないが(汗)ひょっとしたら
自力で数値文字参照にしなければならないのかも・・・
と予測しています
ソースを書いていただけないでしょうか?
探してもなかなか見つからないです

A 回答 (2件)

$inline = 'あいうえお'; #UTF-8


@chars = ();
$outline = "";
(@chars) = ($inline =~ m/([\x01-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf])/xg);
foreach $char (@chars) {
if(length($char) == 1){
$outline .= $char;
}elsif(length($char) == 2){
$unival = (vec($char, 0, 8) & 0x1f) * 0x40 + (vec($char, 1, 8) & 0x3f);
$outline .= "\&#$unival;";
}elsif(length($char) == 3){
$unival = (vec($char, 0, 8) & 0x0f) * 0x1000 + (vec($char, 1, 8) & 0x3f) * 0x40 + (vec($char, 2, 8) & 0x3f);
$outline .= "\&#$unival;";
}
}
print $outline; #結果:あいうえお
    • good
    • 0

あり、ここって数値文字参照を文字に変換しちゃうのか・・・。


「結果:あいうえお」になっちゃってますが実際には
あいうえお
が返ってきます。(&は半角)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
うーん、数値文字参照自体はうまく動くのですが
それでもX-Smilesには表示されません
XFormsを使うのはMozillaにある程度実装されてからにします。

お礼日時:2004/08/27 23:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!