如何使用 PHP 阅读阿拉伯语文本

How to read Arabic text using PHP

我有 PHP 从文本文件读取并允许用户搜索指定字符串的代码。

系统在英文文本上运行完美,但在涉及阿拉伯文本时系统不显示任何内容。

我知道问题出在 UNICODE 上,但我不知道如何解决。

文件内容:

سيلان الطاقة الحرارية من البيئة وإليها. وعادة ما يطلق هذا الاسم على ظاهرة ارتفاع درجات حرارة الأرض عن معدلها الطبيعي. وقد ازداد المعدل العالمي لدرجة حرارة الهواء عند سطح الأرض ب0.74 ± 0.18 °C خلال المائة عام المنتهية سنة 2005. وحسب اللجنة الدولية لتغير المناخ(IPCC) فان "أغلب الزيادة الملحوظة في معدل درجة الحرارة العالمية منذ منتصف القرن العشرين تبدو بشكل كبير نتيجة لزيادة غازات الاحتباس الحراري (غازات البيت الزجاجي) التي تبعثها النشاطات التي يقوم بها البشر.

تخترق أغلب أشعة الشمس الغلاف الجوي لتصل إلى سطح الأرض وأغلب تلك الأشعة تقع في الطول الموجي المرئي (ضوء الشمس الذي تراه العين) لذلك يحدث تسخين لسطح الأرض أثناء النهار، ولا تستطيع الأرض امتصاص الطاقة الشمسية بالكامل، ولو حدث ذلك فستصل حرارة الأرض إلى درجة الانصهار، وتكون نهاية الحياة عليها.

تسخن الأرض لامتصاص حرارة الشمس، ثم يعيد سطح الأرض إشعاع الطاقة الممتصة مرة أخرى إلى الغلاف الجوي، وعند غياب أي تأثيرات معقدة يحدث اتزان حراري. وفي هذه الحالة تكون درجة حرارة سطح الأرض نحو – 2.3 درجة مئوية، وتكون الطاقة التي تعيد الأرض إشعاعها على صورة أشعة تحت الحمراء (وهذا المثال مخالف للواقع).

وفي الواقع تعقيدات، حيث يحتجز الغلاف الجوي جزءاً من الأشعة تحت الحمراء؛ لوجود جزئيات ثاني أكسيد الكربون وبخار الماء التي تمتص الجزء الأكبر من الأشعة تحت الحمراء، والجزء الذي لا يتم إمتصاصه يخرج من الغلاف الجوي إلى الفضاء، ويعمل الجزء الممتص من الأشعة تحت الحمراء في الغلاف الجوي على رفع درجة الحرارة.[1]

php 版本 7.1.11

我正在使用 Xampp 和 apache 服务器

代码:

<?php
$myFile = "arabic text.txt";
$myFileLink = fopen($myFile, 'r');

$line = 1; 

if(isset($_POST["search"])) {
    $search =$_POST['name'];

 while(!feof($myFileLink)) { 
     $myFileContents = fgets($myFileLink);
     if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches)) {

        foreach($matches[1] as $match) {
           echo "Found $match on $line";
        }
     }
     ++$line;
 }
}

fclose($myFileLink);
//echo $myFileContents; 
?>

<html>
    <head></head>
    <body>
     <form action="index.php" method="post">
          <p>enter your string <input type ="text"  id = "idName"  name="name" /></p>
          <p><input type ="Submit" name ="search" value= "Search" /></p>
    </form>
    </body>
</html>

将此 html 放在页面顶部

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

如果您在 windows 上工作,您的文件可能不是 utf-8 格式。 试试这个:

$myFileContents = utf8_encode(fgets($myFileLink));

有关更多信息和其他解决方案,请参阅此线程: Working with files and utf8 in PHP

因为您的表单发布是unicode字符,如果您的文件包含utf-8编码,则需要使用utf-8编码

您可以使用以下方法检查编码

echo mb_detect_encoding($search);
echo mb_detect_encoding("حلو أل إز جود");

使用 utf-8 设置格式

<html>
    <head></head>
    <meta http-equiv="Content-Language" content="ar-sa">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <form action="POST.php" method="post">
          <p>enter your string <input type ="text"  id = "idName"  name="name" /></p>
          <p><input type ="Submit" name ="search" value= "Search" /></p>
    </form>
    </body>
</html>

相应地更改编码

如有不足请补充