PDA

View Full Version : دریافت اطلاعات انگلیسی و فارسی از xml و درج آن در mysql به صورت صحیح



jalil_gh
دوشنبه 04 آذر 1392, 22:38 عصر
با سلاخ خدمت اساتید.
من یه فایل xml دارم حاوی کلمات انکلیسی و فارسی که میخام اونارو بریزم تو mysql. فایل xml به این صورته.
<TR><TD>a</TD>
<TD>ÍÑÝ Çæá ÇáÝÈÇí ÇäáíÓí¡ ÍÑÝ ÇÖÇÝå ãËÈÊ .</TD>
</TR>
<TR><TD>a bomb</TD>
<TD>ÈãÈ ÇÊãí .</TD>
</TR>
<TR><TD>a la carte</TD>
<TD>(ÏÑ ãæÑÏ ˜ÇÛÐ) ÌÏÇÌÏÇ ÓÝÇÑÔ ÏÇÏå ÔÏå .</TD>
</TR>
<TR><TD>aardwolf</TD>
<TD>(Ì.Ô.) ˜ÝÊÇÑ (Proteles cristata)Èæãí ÌäæÈ æ ãÔÑÞ ÂÝÑíÞÇ .</TD>
</TR>
<TR><TD>aaron</TD>
<TD>åÇÑæä ÈÑÇÏÑ ãæÓí .</TD>
</TR>
<TR><TD>aaronic</TD>
<TD>(.Ô.) íÇåí ÇÒ ÎÇäæÇÏå åæÝÇÑíÞæä ÈäÇã|. hypericum calycinumåÇÑæäí¡ ÇÒ äÓá åÇÑæä¡ ÌÒæ Ñæå ˜ÔíÔÇä ÇÆíä ÏÑÌå ãæÑãä . (mormon)</TD>
</TR>
<TR><TD>ab</TD>
<TD>íÔæäÏ áÇÊíä ÈãÚäí &lt;ÏæÑÇÒ&gt; æ &lt;ÇÒ&gt; æ &lt;ÌÏÇÆí&gt; æ &lt;ÛíÑ&gt; ãÇääÏABuseæ . ABaxial</TD>
</TR>

من اومدم اینو با استفاده از simplXML خوندم و به database اضافه کردم به این صورت:

<?php
try {
$conn = new PDO("mysql: host=localhost; dbname=dic; charset=utf8", 'root', '');
//$conn->exec("set names utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare("INSERT INTO dic (word, meaning) VALUES (:word, :meaning)");

$xml = simplexml_load_file("data.xml");
foreach($xml->children() as $child)
{
$stmt->execute(array(
":word" => $child->TD[0],
":meaning" => $child->TD[1]
));
}

} catch(Exception $e) {
echo $e->getMessage();
}


?>

در ضمن باید بگم که collation دیتابیس هم برابر utf8-general-ci قرار دادم (persion و bin) رو هم امتحان کردم.

حالا وقتی میخام اطلاعات رو به این صورت نمایش بدم درست نمایش نمیده.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<table>

<?php
try {
$conn = new PDO("mysql: host=localhost; dbname=dic; charset=utf8", 'root', '');
//$conn->exec("set names utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare("SELECT word, meaning FROM dic");
$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $item){
echo "<tr>";
echo "<td>".$item['word']."</td>";
echo "<td>".$item['meaning']."</td>";
echo "</tr>";
}


} catch(Exception $e) {
echo $e->getMessage();
}

?>

</table>
</body>
</html>
چطور میشه این مشکل رو حل کنم؟:متفکر:
پ.ن: در ضمن من تاپیک پرسشهای تکراری رو خوندم و سایت رو هم جستجو کردم.

mahmod2000
سه شنبه 05 آذر 1392, 08:33 صبح
$conn = new PDO("mysql: host=localhost; dbname=dic; charset=utf8", 'root', '');
$conn->query("SET CHARACTER SET utf8");
$conn->query("SET CHARACTER_SET_CONNECTION=utf8");
$conn->query("SET NAMES UTF8");

jalil_gh
سه شنبه 05 آذر 1392, 11:26 صبح
ممنون دوست عزیز. کدهای شما رو هم اضافه کردم ولی جواب نداد.
فکر میکنم چون اطلاعات از قبل به صورت ÍÑÝ Çæá ÇáÝÈÇí ÇäáíÓí¡ ÍÑÝ ÇÖÇÝå ãËÈ هست، همینجوری هم وارد دیتابیس میشه و همینجوری هم از اون خارج میشه و نمیشه کاریش کرد!!؟؟

ابوذر محمودی
سه شنبه 05 آذر 1392, 12:07 عصر
این خط رو به اول فایل XML اضافه کنید:
<?xml version="1.0" encoding="UTF-8"?>

jalil_gh
سه شنبه 05 آذر 1392, 12:21 عصر
این خط رو به اول فایل XML اضافه کنید:
<?xml version="1.0" encoding="UTF-8"?>
اضافه کردم بازم درست نشد.