6

私は私の人生のためにこれを理解することはできません。

ページ上の要素の翻訳を取得するクエリがあります。そのため、そのページには 15 の言語をいくつでも表示できます。スウェーデン語などの言語を追加し始めると、öフィールド全体で null 文字列が返されます。

テーブルのエンコーディングを確認しましたが、使用していると主張していUTF-8ますが、これがどのように機能しないかを見て、混乱しています。

ここに私が取り組んでいるクエリがあります:

SELECT
   form.form_id,
   elem.elem_type,
   elem.elem_name,
   elem.elem_format,
   elem.elem_required,
   trans.trans_label,`
   trans.trans_description,
   trans.trans_defaultValue,
   trans.trans_other,
   elem.elem_advancedcommand
FROM
   events_form form
LEFT JOIN
   events_form_elements elem
ON
   form.event_id = elem.event_id
INNER JOIN
   events_form_translations trans
ON
   elem.elem_id = trans.elem_id
INNER JOIN
   events_form_languages lang
ON
   trans.lang_id = lang.lang_id
WHERE 
   form.form_id = '{$formid}' AND lang.language = '{$language}'
ORDER BY
   elem.elem_sortorder

今、私は次のようなことをしようとしました:

CONVERT(CAST(trans.trans_description as BINARY) USING latin1) as trans_description,

強制的にエンコーディングを変換しますが、結果はまったく得られません。

結果を取得すると、すぐに json_encoded になり、ユーザーに返されます (Ajax Request)。print_r出力配列を実行すると同じ問題が発生するため、json_encodeだとは思いません。

また..最後に、私が構築しているシステムはxPDOを使用しているため、それが問題かどうかはわかりません。

編集: PHP が正しい値を返すか、少なくとも値を返すようです。たとえば、ここではprint_rダンプです:

[trans_label] => Ditt f�rnamn?
[trans_description] => 
[trans_defaultValue] => First Name

したがって、私のjson_encodeがその文字列に触れるのは、文字列がnullになるときのようです。

4

4 に答える 4

10

PDO 接続文字列でエンコーディングを指定する必要があります。例えば:

mysql:host=localhost;port=3306;dbname=test;charset=utf8

これは、データベース ドライバが結果を返すときに使用するエンコーディングと、クエリが含まれているとドライバが想定するエンコーディングを制御します。指定しない場合は、デフォルトのエンコーディングが使用されます。多くの場合、デフォルトは ですlatin1

これは、データの 16 進表現をbin2hexPHP で出力することで確認できます。förnamn の ö は として返されf6ます。テキストが UTF-8 でエンコードされている場合は、c3b6.

于 2012-07-16T16:21:03.017 に答える
3

Web ページのエンコーディングについては何も言われませんでした。ページのセクションにエンコーディングを UTF-8 に強制する
行がありますか?<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
于 2012-07-16T16:35:40.603 に答える
1

文字を母国語のアイスランド語にエンコードする際に問題がありましたが、すべてのutf8文字の相互解決策を見つけました。

mysql_select_dbの直後、 mysql_queryの前にを挿入します。

 mysql_query("SET character_set_connection=utf8, 
 character_set_results=utf8, 
 character_set_client=utf8", $con);

$con は mysql への接続です

幸せなコーディング..

于 2015-03-22T10:11:12.480 に答える
0

データ型の互換性がないため、変換後に答えは null になります。しかし、ページにヨーロッパまたはアラビア語の文字を表示するのは非常に簡単です。

これらのヨーロッパ文字をページ (jsp、php、html) に表示したい場合は、最初にページのエンコーディングを次のように UTF-8 に設定します。

pageEncoding="utf-8"

また、データベース接続クラスを utf-8 文字用に変更する必要があります

以下のコードを使用してください:-

jdbc:mysql:your_ipaddress":3306/"+db+"?requireSSL=false&useUnicode=true&characterEncoding=UTF-8

それがあなたを助けることを願っています。

于 2012-07-23T07:52:21.420 に答える