質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

3486閲覧

jsoupでphp(euc-jpのform)に全角文字をpostすると文字化け(無効なコード?)になってしまう

risaito74

総合スコア44

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/01/28 02:27

編集2017/01/28 02:56

Java(jsoup)で某サイト(charset=euc-jp)へ自動POSTするプログラムを作っています。
formのtextやtextareaに対して半角文字列をPOSTした際には問題なく反映されますが、全角文字をPOSTすると文字化けになってしまいます。
(※より正確に言うと、文字化けというより、文字コードが無効と判別されたときに返ってくるコードのようです)
XAMPPで某サイトを簡易的に再現し、同じ現象が起きるようにしました。

PHP

1 2<?php header("Content-Type: text/html;charset=euc-jp");?> 3<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 4<?php 5$title = $_POST["title"]; 6$comment = $_POST["comment"]; 7?> 8<html> 9<head> 10<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> 11</head> 12<body> 13<h1>コメント確認画面</h1> 14 15<?php 16echo <<<EOM 17<form method="post" action="posttxt2.php"> 18タイトル:<input type="text" name="title" value="{$title}"><br> 19コメント:<br> 20<textarea name="comment">{$comment}</textarea> 21</form> 22EOM; 23?> 24 25<a href="posttxt1h.html">posttxt1h.htmlへ戻る</a><br> 26</body> 27</html> 28

上記のPHPに対して、以下のJava(Jsoup)プログラムで自動POSTを行っています。

Java

1 public static void main(String[] args) throws IOException { 2 String ua = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"; 3 4 String title = "タイトル"; 5 String comment = "コメント"; 6 7 byte[] titleByteEuc = title.getBytes(Charset.forName("EUC_JP")); 8 9 String titleEuc = new String(titleByteEuc, "EUC_JP"); 10 11 //***** 確認画面へPOST実行 ***** 12 Response res3 = Jsoup.connect("http://localhost:81/work/posttxt2.php") 13 .userAgent(ua) 14 .timeout(0) 15 .header("Accept-Charset", "EUC_JP") 16 .data("title", titleEuc) 17 .data("comment", comment) 18 .followRedirects(false) 19 .method(Method.POST) 20 .execute(); 21 22 doc = res3.parse(); 23 System.out.println(doc); 24 }

この出力(doc)が以下のようになります。

html

1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2<html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 5 </head> 6 <body> 7 <h1>コメント確認画面</h1> 8 <form method="post" action="posttxt2.php"> 9 タイトル: 10 <input type="text" name="title" value="&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;"> 11 <br> コメント: 12 <br> 13 <textarea name="comment">&#xfffd;&#xfffd;&#xfffd;&#xfffd;</textarea> 14 </form> 15 <a href="posttxt1h.html">posttxt1h.htmlへ戻る</a> 16 <br> 17 </body> 18</html>

上記のtitleのvalut値"�…"は他の文字にしても同じようになるので、ただの文字化けというより、無効なコードと判別されているのではないかと考えています。
(例えばtitleを"あ"とするとvalue="��となり、"い"としてもまったく同じです)

上記のコードを書くにあたって、以下の情報を参考にしました。

Javaで文字列の文字コードを変換する

【Java】byte配列から文字列へ変換、文字列からbyte配列へ変換する方法

php側は修正できない前提で、Java(Jsoup)側でどのようにPOSTすれば全角文字が正しく送信できるか、ご助言をいただければと思います。よろしくお願い致します。

※環境
・Windows10
・Eclipse(Java,jsoup)
・XAMPP(php)

※試行錯誤したこと
・最初は「.data("title", title)」とそのまま送信していました。(どちらも挙動は同じ)
・「.header("Accept-Charset", "EUC_JP")」はあってもなくても挙動に変化はありません。
・「.data("title", (String)titleByteEuc)」のように強引にキャストしようとしても、エラーになってしまいます。
・検証としてtitleのみ文字コードの変換を試みています。
・別途用意したhtmlのformからphpへPOSTした場合は、全角文字も文字化け無く表示されます。
・(追記)"EUC_JP"を"UTF-8"に変えて試してみましたが、挙動に変化はありませんでした。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

posttxt2.phpがUTF8なのでは。
euc-jpはhtmlだけ。
UTF8で投稿は試してみましたか?

投稿2017/01/28 02:44

myon

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

risaito74

2017/01/28 02:54

回答ありがとうございます。 posttxt2.php自体は秀丸で「日本語(EUC)」にエンコードして保存しています。 また"EUC_JP"を"UTF-8"に変えて試してみましたが、結果に変化はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問