الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

( fopen ) لا تقرأ الحروف العربية

بدأه gemswebs في 18 يوليو 2013 · 2 رد · 964 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذة الدلة تستخرج الكلام من ملف (.doc)

ولكن المشكله انها تحول الحروف العربية الى حروف انجليزيه ..

 

و بعد  محاولات وجدت ان الحروف العربية تحول الى حروف ( ASCII ) .. اى لما يفابلها من الحروف الانجليزيه بهذا التكويد
مثال  : لو هذا السطر موجود في ملف الوورد 

اقتباس
Age: 23 year    علي  

 

عند الاستخراج عن طريق البي اتش بي .. يكون كالتالي :

Age: 23 year 9DJ

أي أجد أنن كلمة علي  تحولت إلى : 9DJ .. وهكذا  لكل الحروف العربية

 

 

ومرفق ملف فية الكود وملف اخر للتجربة علية

 

word.php

filename.doc

function word($filename){




if(($fh = fopen($filename, 'r')) !== false ) {


$headers = fread($fh, 0xA00);
$n1 = ( ord($headers[0x21C]) - 1 );
$n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 );
$n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 );
$n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 );
$textLength = ($n1 + $n2 + $n3 + $n4);


$extracted_plaintext = @fread($fh, $textLength);


$text=str_replace(  chr(13) , "\n", $extracted_plaintext);


echo $text;
}




}


word('filename.doc');

تم تعديل هذه المشاركة بواسطة gemswebs في 18 يوليو 2013 في 13:16

#2

البرنامج يعمل جيداً الا أن هناك مشكلة في الترميز، يظهر أن ملف الورد يحفظ بترميز utf-16 little endian (أي utf-16 مقلوب)، وهو ترميز اليونيكود المستخدم في ويندوز، ولما تعرضه في الصفحة سيعتقد المتصفح أن ترميزه utf-8 لهذا ستظهر لك رموز غير مفهومة.

 

هناك حلين إما أن تجعل ترميز الرد UTF-16LE:

header('Content-Type: text/plain; charset=UTF-16LE');...

 

الا أنني لا أنصح بها، فسيتضاعف حجم الصفحة كثيراً دون داعي، الطريقة الثاني أن تحوّل النص من UTF-16LE إلى UTF-8 باستخدام الدالة mb_convert_encoding:

 

header('Content-Type: text/plain; charset=UTF-8');

...

        $text = mb_convert_encoding($text, 'UTF-8', 'UTF-16LE');
        echo  $text;
    }
    
    
}

word('./filename.doc');
1
#3

حاولت باسخدام :

mb_convert_encoding($text, 'UTF-8', 'UTF-16LE');

بالفعل الحروف العربي  ظهرت بدون مشاكل.. ولكن بقيت الملف ( الحروف الانجليزي ) بعضها  ظهر كحروف غريبة ، وبعضها  ظهر مظبوط ... 

ما الحل ؟؟ 

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…