09/10/2018, 23:31

Giúp mình với. Tạo từ điển theo chuẩn DICT!!!

Mình đang làm một bài tập PHP trong đó yêu cầu download cơ sở dữ liệu của chuẩn từ điển DICT, dùng PHP viết chương trình kết nối đến CSDL đó để lấy nghĩa của từ do người dùng nhập vào.
Mình đã kết nối đến CSDL và lấy ra được đoạn nghĩa của từ tương ứng, tuy nhiên đoạn nghĩa đó lại bị mã hóa rất lạ, mình không biết làm sao để cho nó hiện ra đúng từ latinh.
File chứa nghĩa của từ điển anhViet là anhviet109K.dict.dz . Các bạn có thể chỉ giúp mình cách thức mã hóa cho ra đúng nghĩa được không?
Dưới đây là một đoạn nghĩa bị mã hóa mà mình lôi ra được khi tra từ "robin" :

‹ ¤<é@RA�Ëãÿ�¦C©CBDFCÝ<§<2Bë BBöG‡FL¨D‚H­EÊID™DÿH,GþCÞHDàE• GWDÈE>CPB™D)FWHDJJ÷Dü@é=0?Ò@:<9iEF<1¯D
zmt264 viết 01:34 ngày 10/10/2018
PHP Code:
<?php
$sword 
$_POST***91;'name'***93;;
echo 
"Ban nhap vao tu: ".$sword."<br \> ";
$handle = @fopen("./AnhViet/data/EV/anhviet109K.index""r");
if (
$handle) {
while (!
feof($handle)) {
$buffer fgets($handle100);
$pos strpos($buffer,"\t" );
$word substr($buffer,0,$pos );
$data substr($buffer,$pos+);

if (
$word == $sword)
{
$pos strpos($data,"\t" );
$data1 substr($data,0,$pos ); // phan chua dia chi offset cua tu
$data2 substr($data,$pos+); // phan chua do dai nghia cua tu
break;
}
}
fclose($handle);
}
else
echo 
"Khong tim thay du lieu!";

//ham chuyen tu co so 64 sang co so 10
function GetDecimalValue($string)
{
$base64 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz0123456789+/";
$decValue 0;
for (
$i=$i<strlen($string) ; $i++)
{
$pos strpos($base64substr($string,$i,)) ;
$decValue += pow(64,strlen($string)-$i-1)*$pos;
}
return 
$decValue;
}

echo 
GetDecimalValue($data1)."<br \> ";
echo 
GetDecimalValue($data2)."<br \> ";

//Ham lay va in nghia ra tu CSDL
function GetMeaning($offset,$length)
{
$handle = @fopen("./AnhViet/data/EV/anhviet109K.dict.dz""r");
if (
$handle) {
$meaning stream_get_contents($handle$length$ofset);
if (
$meaning)
echo 
$meaning;
else
echo 
"Khong tim thay nghia cua tu!";
fclose($handle);
}
else
echo 
"khong mo duoc file!";
}

GetMeaning(GetDecimalValue($data1),GetDecimalValue ($data2));
?>
post lại cho dễ nhìn tí. Theo mình thì có lẽ nó chỉ là dạng tiếng Việt thôi, unicode byte chẳng hạn, bạn xem 1 từ điển khác Anh - Anh, hoặc Việt - Anh xem thế nào...
robinsoncity viết 01:40 ngày 10/10/2018
Hic, mình có thử các bộ từ điển khác cũng không được. Mình nghĩ cái này có liên qua gì đến cách lấy dữ liệu từ trong file anhviet109K.dict.dz. Khi coi file này bằng notepad hay editplus thì cũng chỉ toàn thấy các kí hiệu như vậy mà thôi. Trong khi đó mình dùng hàm stream_get_contents($file, $length, $offset) để lấy để đọc phần dữ liệu bắt đầu từ địa chỉ $offset có độ dài $length vào một string, sau đó in string đó ra màn hình --> kết quả là cái file sao nó in ra như thế. Hu hu không biết làm sao đây nữa
anhtuannd viết 01:42 ngày 10/10/2018
Cái file anhviet109K.dict.dz bạn dùng Winrar để giải nén nhé, nó là file nén mà Cách đây 2 năm cũng làm cái này, ngu mất 3 ngày cứ tìm cách open file dz ra để đọc không.
robinsoncity viết 01:37 ngày 10/10/2018
Wow, mình làm được rồi. Thanks bạn anhtuannd rất nhiều, bạn là cứu tinh của mình.
orikhanh viết 01:41 ngày 10/10/2018
chào các bạn mình là thành viên mới của diễn đàn.minh thấy diên đàn này hay ,các thành viên rất nhiệt tình,minh muôn tham gia diễn đần muôn mấy bạn giup đỡ
orikhanh viết 01:36 ngày 10/10/2018
Giúp mình với
mình thấy anhtuannd nói dùng winrar để giải file anhviet109k.dict.dz.nghĩa là sao mong anh anhtuannd giúp em với.Cảm ơn anh nhiều
robinsoncity viết 01:33 ngày 10/10/2018
À, file anhviet109k.dict.dz là file nén nhưng không phải là giải nén bằng Winrar mà giải nén bằng 7zip. sau khi giải nén sẽ ra file anhviet109k.dict. Lúc này chúng ta có thể sử dụng vô tư vì nội dung không còn bị mã hóa nữa. Thanks anhtuannd rất nhiều !
Bài liên quan
0