I18N_Arabic
[ class tree: I18N_Arabic ] [ index: I18N_Arabic ] [ all elements ]

Source for file CharsetD.php

Documentation is available at CharsetD.php

  1. <?php
  2. /**
  3.  * ----------------------------------------------------------------------
  4.  *  
  5.  * Copyright (c) 2006-2016 Khaled Al-Sham'aa.
  6.  *  
  7.  * http://www.ar-php.org
  8.  *  
  9.  * PHP Version 5
  10.  *  
  11.  * ----------------------------------------------------------------------
  12.  *  
  13.  * LICENSE
  14.  *
  15.  * This program is open source product; you can redistribute it and/or
  16.  * modify it under the terms of the GNU Lesser General Public License (LGPL)
  17.  * as published by the Free Software Foundation; either version 3
  18.  * of the License, or (at your option) any later version.
  19.  *  
  20.  * This program is distributed in the hope that it will be useful,
  21.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.  * GNU Lesser General Public License for more details.
  24.  *  
  25.  * You should have received a copy of the GNU Lesser General Public License
  26.  * along with this program.  If not, see <http://www.gnu.org/licenses/lgpl.txt>.
  27.  *  
  28.  * ----------------------------------------------------------------------
  29.  *  
  30.  * Class Name: Detect Arabic String Character Set
  31.  *  
  32.  * Filename:   CharsetD.php
  33.  *  
  34.  * Original    Author(s): Khaled Al-Sham'aa <khaled@ar-php.org>
  35.  *  
  36.  * Purpose:    This class will return Arabic character set that used for
  37.  *             a given Arabic string passing into this class, those available
  38.  *             character sets that can be detected by this class includes
  39.  *             the most popular three: Windows-1256, ISO 8859-6, and UTF-8.
  40.  *              
  41.  * ----------------------------------------------------------------------
  42.  *  
  43.  * Detect Arabic String Character Set
  44.  *
  45.  * The last step of the Information Retrieval process is to display the found
  46.  * documents to the user. However, some difficulties might occur at that point.
  47.  * English texts are usually written in the ASCII standard. Unlike the English
  48.  * language, many languages have different character sets, and do not have one
  49.  * standard. This plurality of standards causes problems, especially in a web
  50.  * environment.
  51.  *
  52.  * This PHP class will return Arabic character set that used for a given
  53.  * Arabic string passing into this class, those available character sets that can
  54.  * be detected by this class includes the most popular three: Windows-1256,
  55.  * ISO 8859-6, and UTF-8.
  56.  *
  57.  * Example:
  58.  * <code>
  59.  *   include('./I18N/Arabic.php');
  60.  *   $obj = new I18N_Arabic('CharsetD');
  61.  * 
  62.  *   $charset = $obj->getCharset($text);
  63.  * </code>
  64.  *                
  65.  * @category  I18N
  66.  * @package   I18N_Arabic
  67.  * @author    Khaled Al-Sham'aa <khaled@ar-php.org>
  68.  * @copyright 2006-2016 Khaled Al-Sham'aa
  69.  *    
  70.  * @license   LGPL <http://www.gnu.org/licenses/lgpl.txt>
  71.  * @link      http://www.ar-php.org
  72.  */
  73.  
  74. /**
  75.  * This PHP class detect Arabic string character set
  76.  *  
  77.  * @category  I18N
  78.  * @package   I18N_Arabic
  79.  * @author    Khaled Al-Sham'aa <khaled@ar-php.org>
  80.  * @copyright 2006-2016 Khaled Al-Sham'aa
  81.  *    
  82.  * @license   LGPL <http://www.gnu.org/licenses/lgpl.txt>
  83.  * @link      http://www.ar-php.org
  84.  */ 
  85. {
  86.     /**
  87.      * Loads initialize values
  88.      *
  89.      * @ignore
  90.      */         
  91.     public function __construct()
  92.     {
  93.     }
  94.  
  95.     /**
  96.      * Count number of hits for the most frequented letters in Arabic language
  97.      * (Alef, Lam and Yaa), then calculate association ratio with each of
  98.      * possible character set (UTF-8, Windows-1256 and ISO-8859-6)
  99.      *                           
  100.      * @param String $string Arabic string in unknown format
  101.      *      
  102.      * @return Array Character set as key and string association ratio as value
  103.      * @author Khaled Al-Sham'aa <khaled@ar-php.org>
  104.      */
  105.     public function guess($string)
  106.     {
  107.         // The most frequent Arabic letters are Alef, Lam, and Yeh
  108.         $charset['windows-1256']  substr_count($stringchr(199));
  109.         $charset['windows-1256'+= substr_count($stringchr(225));
  110.         $charset['windows-1256'+= substr_count($stringchr(237));
  111.  
  112.         $charset['iso-8859-6']  substr_count($stringchr(199));
  113.         $charset['iso-8859-6'+= substr_count($stringchr(228));
  114.         $charset['iso-8859-6'+= substr_count($stringchr(234));
  115.         
  116.         $charset['utf-8']  substr_count($stringchr(216).chr(167));
  117.         $charset['utf-8'+= substr_count($stringchr(217).chr(132));
  118.         $charset['utf-8'+= substr_count($stringchr(217).chr(138));
  119.         
  120.         $total $charset['windows-1256'
  121.                  $charset['iso-8859-6'
  122.                  $charset['utf-8'1;
  123.         
  124.         $charset['windows-1256'round($charset['windows-1256'100 $total);
  125.         $charset['iso-8859-6']   round($charset['iso-8859-6'100 $total);
  126.         $charset['utf-8']        round($charset['utf-8'100 $total);
  127.         
  128.         return $charset;
  129.     }
  130.     
  131.     /**
  132.      * Find the most possible character set for given Arabic string in unknown
  133.      * format
  134.      *         
  135.      * @param String $string Arabic string in unknown format
  136.      *      
  137.      * @return String The most possible character set for given Arabic string in
  138.      *                 unknown format[utf-8|windows-1256|iso-8859-6]
  139.      * @author Khaled Al-Sham'aa <khaled@ar-php.org>
  140.      */
  141.     public function getCharset($string)
  142.     {
  143.         if (preg_match('/<meta .* charset=([^\"]+)".*>/sim'$string$matches)) {
  144.             $value $matches[1];
  145.         else {
  146.             $charset $this->guess($string);
  147.             arsort($charset);
  148.             $value key($charset);
  149.         }
  150.  
  151.         return $value;
  152.     }
  153. }

Documentation generated on Fri, 01 Jan 2016 10:25:53 +0200 by phpDocumentor 1.4.0