4

過去数時間、解決策を見つけようとしてきましたが、できませんでした。インターネットとこのフォーラムで可能なすべての解決策を試しましたが、何も機能していないようです. ここに問題があります。

ユーザーがフォームのテキストエリアに入力または貼り付けるアラビア語データをmysqlデータベースに保存したいと考えています。ウェブサイトはアラビア語で、フォームにはこの 1 つのテキストエリアしか含まれていません。

重要なポイント:

Web サイトは静的なアラビア語コンテンツを正しく表示しています。Web サイト全体で utf8 文字セットが使用されています。だから、それは問題ではありません。

テーブル (home) とコンテンツ フィールド (content) は両方とも utf8_unicode_ci 照合に設定されているため、どちらも問題ありません。

Form は accept-charset='utf-8' に設定されているので、それも問題ありません。

テーブルにphpMyAdminを使用してアラビア語のテキストを挿入すると、まったく問題はありません。

実際、テーブル内のアラビア語テキスト (phpMyAdmin を介して入力) が Web サイトで取得されると、完全に表示されます。

しかし、アラビア語のデータがテキスト領域に入力され、データベースに送信されて挿入クエリデータを使用して保存されるとすぐに、???? に変換されます。

私は使っている

mysql_query("SET NAMES 'utf8'"); 
mysql_query('SET CHARACTER SET utf8');

接続後なので全く問題ありません。先ほど言ったように、データは問題なく取得されます。2枚の画像をアップしました。私の問題を示しています。

私は本当にここで立ち往生しており、ご覧のとおり、これを解決するために可能なすべての手順を実行しましたが、この動作は本当に奇妙です. 助けてください。

画像 1: phpMyadmin を介して直接保存された同じテーブルから適切に取得されたデータを表示

画像 2 同じデータを mysql データベースに送信して同じテーブルに表示すると、??? に変わります。

データをdbに挿入するために使用しているコードは次のとおりです。

 $content=$_POST["content"];
echo $content;
$sql="update home set content='$content'";
$result=mysql_query($sql) or die(mysql_error());

2 番目の echo ステートメントを確認できます。問題をデバッグするために追加しました。このエコーでは、データが完全に表示されます。問題は、私が推測するクエリで発生します。

4

3 に答える 3

3

私はアラビア語で試していませんでしたが、前回のプロジェクトサイトでコードを試しました。サイトは多言語で利用できました。データベースにコンテンツを保存し、データコンテンツを取得するには、php関数urlencodeを追加するだけでurldecode関数を使用できます。

$content=urlencode($_POST["content"]);

echo $content;
$sql="update home set content='$content'";

取得/印刷用

echo urldecode($data['content']);

または、これが不要な場合は、列照合タイプ「UTF8_GENERAL_CI」を変更するだけです。

于 2013-01-29T23:08:39.987 に答える
2

サーバー側のコードはすべて正常に動作しているようです。ブラウザがフォームをサーバーに送信し、データが間違っているか、誤って解釈されたときに、エラーが発生しているようです。

1) マルチバイト拡張機能がインストールされていることを確認してください。そうしないと、PHP がブラウザーからの文字を正しく解釈できない可能性があります。http://php.net/manual/en/book.mbstring.php

2) ページが実際にブラウザによって UTF8 として認識されていることを再確認できますか。ブラウザがページの文字セットを認識していない可能性がありますが、表示方法を推測しているため、アラビア文字を正しく表示している可能性があります。それではまず。

HTML に、次のメタ タグを追加します。

また、スクリプトの先頭に次の PHP ヘッダーを追加します。

header("Content-Type: text/html;charset=UTF-8");

3) それらが機能しない場合は、ブラウザーで実際のフォーム送信を確認してください。Chrome の開発者ツールまたは Firefox の Firebug を使用して、送信されている内容を正確に確認してください。

たとえば、サーバー上のテスト ページにアラビア語のテキストを送信するテスト ページを作成しました。リクエストでは、フォームが次のようにエンコードされていることがわかります

Content-Length: 61
test=%26%231607%3B%26%231594%3B%26%231594%3B%26%231601%3B&go=

私が見ることができる個々の文字にテキストを分割する

%26
%231607
%3B
%26
%231594
%3B
%26
%231594
%3B%26
%231601
%3B

つまり、アラビア文字は正しくエンコードされています。おそらく、何か違うことがわかるでしょう。

于 2012-07-30T06:14:43.810 に答える