0

Webページを取得してその一部を解析し、値としてPOSTしようとしています。問題は、ó という文字がある場合に ó を取得するため、それを投稿すると、urlencode 変換によってそれらの文字がまったく別のものに変換されてしまい、機能しないことです。

より正確には、utf-8 の ó が ISO-9959-1 の場合と同じように解釈されると ó が生成されます。または、少なくともそれが私のブラウザの動作です。utf-8 でページを表示するように設定すると、ó が表示されます。 ISO-9959-1 でページを表示するようにブラウザを設定すると、√、他のエンコーディングでは異なる記号が生成されます。

ページの結果とその特定の文字列を utf-8 に変換しようとしました。また、utf-8 のみを受け入れるようにヘッダーを設定しようとしましたが、それも機能していません。それが問題だと確信していますが、アイデアが不足しています。php.ini の構成を変更しましたが、まだ再起動していない可能性があります。基本的に、これは暗闇での撮影のようなものであり、いくつかの助けをいただければ幸いです。

これが役立つ場合: 特定のコードはこちら: https://github.com/trylks/golem/blob/master/php/copperGolem.php

メソッドは「form」で、以前に取得したページからパラメータ値の 1 つを GET で取得します。

ありがとうございました。

PD の解決: ここ数時間、これに取り組んできましたが、他に必要な多くのことを変更したかどうかわかりません。いずれにせよ、それを機能させる最後の変更は、60 行目を次のように変更する$dom->loadHTML(mb_convert_encoding($p, 'html-entities', mb_detect_encoding($p)));ことでした。ここで説明されているように、問題は libcurl ではなく DomDocument にあります: PHP DomDocument fails to handle utf-8 characters (☆)

4

1 に答える 1

0

問題は にありDomDocument、utf-8 を適切に処理しません。html-entities への変換は最も安全なオプションであり、これらの文字を echo (cli を使用しても) で出力したり、これらの文字を urlencoding したりすると、魔法のように機能します。基本的DomDocumentに utf-8 を受け入れませんが、utf-8 を出力するようです。DomDocument がそれを元に戻し、すべてが再び通常の状態に戻るように、奇妙な変換を行う必要があります。

これを行うには$dom、DomDocument であるため、 へのすべての呼び出しでこれを行うだけで十分です$dom->loadHTML($p)

$dom->loadHTML(mb_convert_encoding($p, 'html-entities', mb_detect_encoding($p)));

これは、この別の質問でよりよく説明されています: PHP DomDocument fails to handle utf-8 characters (☆)

于 2013-03-30T02:30:46.587 に答える