1

データベースに書き込む前に、XML ファイルを取得してさまざまな文字列に読み込んでいますが、ドイツ語の文字に問題があります。

XML ファイルの始まり

<?xml version="1.0" encoding="UTF-8"?>

次に、私が問題を抱えている例はこの部分です

<name><![CDATA[PONS Großwörterbuch Deutsch als Fremdsprache Android]]></name>

私のPHPには、この関連セクションがあります

$dom = new DOMDocument();
$domNode = $xmlReader->expand();
$element = $dom->appendChild($domNode);
$domString = utf8_encode($dom->saveXML($element));
$product = new SimpleXMLElement($domString);

//read in data
$arr = $product->attributes();
$link_ident = $arr["id"];
$link_id =  $platform . "" . $link_ident;
$link_name = $product->name;

したがって、$link_name は PONS Groörterbuch Deutsch als Fremdsprache Android になります。

私はそれからやった

$link_name = utf8_decode($link_name);

端末にエコーバックしたとき、どちらがうまくいきましたか

PONS GroÃwörterbuch Deutsch als Fremdsprache Android as is now 
PONS Großwörterbuch Deutsch als Fremdsprache Android after utf8decode 

ただし、データベースに書き込まれると、次のように表示されます。

PONS Kompaktwörterbuch Deutsch-English (Android)

MysQL の link_name の照合は utf8_general_ci です

データベースに正しく書き込むには、これをどのように行う必要がありますか?

これは、データベースに書き込むために使用するコードです

$link_name = utf8_decode($link_name);
$link_id = mysql_real_escape_string($link_id);
$link_name = mysql_real_escape_string($link_name);
$description = mysql_real_escape_string($description);
$metadesc = mysql_real_escape_string($metadesc);
$link_created = mysql_real_escape_string($link_created);
$link_modified = mysql_real_escape_string($link_modified);
$website = mysql_real_escape_string($website);
$cost = mysql_real_escape_string($cost);
$image_name = mysql_real_escape_string($image_name);
$query = "REPLACE into jos_mt_links
(link_id, link_name, alias, link_desc, user_id, link_published,link_approved, metadesc, link_created, link_modified, website, price)
VALUES ('$link_id','$link_name','$link_name','$description','63','1','1','$metadesc','$link_created','$link_modified','$website','$cost')";
echo $link_name . " has been inserted ";

シェルから実行すると、

PONS Kompaktwörterbuch Deutsch-Englisch (Android) has been inserted
4

2 に答える 2

1

XMLファイルからUTF-8文字列を取得し、それをUTF-8データベースに配置しています。したがって、エンコードやデコードを行う必要はなく、元の文字列をデータベースにプッシュするだけです。mysql_set_charset('utf-8')最初に使用して、UTF-8文字列が来ることをデータベースに通知したことを確認してください。

utf8_decode誤解をutf8_encode招くような名前が付けられています。これらは、UTF-8とISO-8859-1エンコーディング間の変換専用です。ISO-8859-1に変換されるを呼び出すutf8_decodeと、そのエンコーディングに適合しない文字が自然に失われます。8859-1を使用する必要がある特定の場所がない限り、通常、これらの関数は避ける必要があります。

文字列をエコーし​​たときに端末が何を表示するかを考慮してはいけません。端末には独自のエンコーディングの問題があり、特にWindowsでは、すべての文字を正しく出力できない可能性があります。Western Windowsでは、システムコードページ(PHPが出力するバイトを文字に変換して画面に表示するために端末が使用する)はコードページ1252になります。これは、ISO-8859-1と似ていますが、同じではありません。 。これがutf8_decode、ISO-8859-1を吐き出すが、テキストを期待どおりに表示するように見えた理由です。しかし、それはほとんど役に立ちません。内部的には、すべての文字列にUTF-8を使用する必要があります。

于 2010-06-25T15:28:25.577 に答える
1

データベースに書き込む前に、mb_convert_encoding または iconv 関数を使用する必要があります。

于 2010-06-25T15:06:43.137 に答える