0

テキストにユーロ記号が出現するポイントでデータ挿入プロセスを完全に停止することを除いて、(これまでのところ) すべてを正しく実行するデータ クロール エンジンを作成しました。私は、このシンボルだけが唯一のものではないかもしれないと信じています.

データベーステーブルに挿入しようとしている文字列が次のようになっている場合:

Quick brown € fox jumped over the laizy dog.

これはデータベースになります:

Quick brown 

私の問題は、まさにこの問題についてこのサイトにあるいくつかの指示に従いましたが、運が悪かったことです。

これを修正するために私がすでに行ったこと(php-side):

次のことを確認しました。

mysqli_set_charset($dblink, "utf8");
mysqli_real_escape_string($dblink, $string);

試してみました:

iconv('windows-1250','utf8//TRANSLIT', $string );
iconv('windows-1250','utf8', $string );/*crawled web page declared windows-1250 characterset*/

(ここでは、€ 記号を保持したままデータ挿入を完了することに成功しましたが、他のラテン文字 čćšđž は完全に劣化していました)

  • 他のいくつかの試みmb_convert_encoding()
  • AcceptAccept-Charsetヘッダーを使用してサーバーの応答を変更しようとします

mysql 側:

テーブルとフィールドは utf8_unicode_ci に設定されました

utf8に修正しようとしましDEFAULT CHARACTER SETた(既存の空でないデータベースに修正しました)

失敗。何をしようとしても、挿入プロセスは € 記号で停止します。

誰か私が何をすべきか知っていますか?

4

2 に答える 2

1

私はphp/mysqlのインストールでこれらをテストしましたが、どちらも機能します。注:文字エンコードがユーロをサポートしていなかったため、コマンドラインでユーロを機能させることができなかったため、最初に完全に機能するDBからユーロを選択しました。

$original = 'Quick brown '.$euro.' fox jumped over the laizy dog.';
$escaped =  str_replace($euro,'\\'.$euro,$original);
echo $escaped;
$database->insertSQL('insert into test (text) values (\''.$original.'\')');
$database->insertSQL('insert into test (text) values (\''.$escaped.'\')');

元の挿入とエスケープされた挿入の両方が私のDBに正しく挿入され、SQLはそれを処理する方法を知っているため、エスケープにはバックスラッシュがありません。

私があなたのDBで間違っていると思うことができる唯一のことは、エンコーディングです。私のエンコーディングはlatin1_swedish_ciです。テーブルのエンコーディングを変更した場合、上記のコードブロックは役に立ちますか?

于 2013-02-28T21:53:40.397 に答える
-1

これらの文字はマルチバイトです。したがって、それを var に入れると、đ は %71%41 のようなものになります。それはあなたの問題が発生する場所です。

より詳細なヘルプが必要な場合はお知らせください ミロシェ :)

于 2013-02-28T21:14:44.267 に答える