0

このサイトで検索したところ、多くの回答がありましたが、どれもうまくいきませんでした。PHP simplexml_load_string を使用して以下の XML を解析しようとしています。

私のXMLは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<address>
<name>Peter</name>
<country>Großbritannien</country>
</address>

print_r を使用して印刷すると、結果は次のようになります。

SimpleXMLElement Object
(
    [name] => Peter
    [country] => Großbritannien
 )

ini_set('default_charset', 'UTF-8') または header('Content-Type: text/html; charset=utf-8') を使用すると、結果は次のようになります。

SimpleXMLElement Object
(
    [name] => Peter
    [country] => Großbritannien
)

しかし、データベース (MySQL) に PHP (ヘッダーを utf8 に設定) を使用して国の値を挿入しようとすると、Großbritannien として挿入されます。私のテーブルの文字セットはUTF8で、列の照合はutf8_unicode_ciです。ただし、国の値を(phpMyAdminまたはターミナルを使用して)テーブルに直接挿入すると、適切に挿入されます。

PHP 解析ページから国の値が正しく挿入されない理由を知りたいです。

私のPHPサンプルコードは以下の通りです:

$notificationXml  = simplexml_load_string($xml); 
$con = $notificationXml->country;
mysql_query("INSERT INTO test_1 (con) values ('$con')");

私を助けてください。よろしくお願いします。

4

2 に答える 2

1

これを挿入クエリの上に挿入します

mysql_query('SET NAMES utf8');

AS @decezeが指摘した使用する方が良い

mysql_set_charset('utf8');
于 2013-06-27T11:21:12.450 に答える
1

a) mysql_* 関数を提供する拡張機能は非推奨としてマークされています。pdo_mysql または mysqliから開始することをお勧めし
ます b)接続 charsetに注意する必要があります。つまり、基本的に MySQL サーバーがデータの送受信時にクライアントが使用することを期待する文字セットです。SET NAMES ...クライアント側の mysql ライブラリが新しい文字セット/エンコーディング規則について不明なままになるため、次のような使用は避けてください。そのため、一部の文字処理が意図したとおりに機能せず、セキュリティ関連の問題につながる可能性さえあります。代わりに、専用のクライアント側メカニズムを使用して文字セットを変更してください。mysql_* の場合はmysql_set_charset()、mysqli_* の場合はmysqli::set_charset()、pdo の場合はその情報を次のように dsn に入れる必要があります。

$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8')

(および php バージョン >= 5.3.6 を使用)

于 2013-06-27T11:31:16.563 に答える