2013-03-30 6 views
7

Hier ist mein Arbeitscode:Suchen arabische Buchstaben in arabischen Worten

<!DOCTYPE HTML> 
<html> 
    <head> 
     <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/> 
    </head> 
    <body> 
     <?php 
      $arabic = "صحيفة اسبوعية مستقلة شاملة تتابع الاخبار فى المنطقة العربية"; 
      $french = "que voulez vous dire?"; 

      if (isset($_POST['search'])) { 
       $search = $_POST['search']; 
       $key = $_POST['key']; 
       $td = substr_count($arabic, $key); 
       echo $td; 
      } 

      echo "<br />" . $arabic; 

      function count_occurences($char_string, $haystack, $case_sensitive = true) { 
       if ($case_sensitive === false) { 
        $char_string = strtolower($char_string); 
        $haystack = strtolower($haystack); 
       } 

       $characters = preg_split('//u', $char_string, -1, PREG_SPLIT_NO_EMPTY); 
       //$characters = str_split($char_string); 
       $character_count = 0; 

       foreach ($characters as $character) { 
        $character_count = $character_count + substr_count($haystack, $character); 
       } 

       return $character_count; 
      } 
     ?> 
     <form name="input" action="" method="post"> 
      <input type= "text" name="key" value=""/> 
      <input type ="submit" name="search" value =" find it !"/> 
     </form> 
    </body> 
</html> 

Für die $french es funktioniert gut, aber mit $arabic nicht. Natürlich gibt es keinen Fehler, aber wenn ich zum Beispiel ح eingeben, um nach diesem Buchstaben zu suchen, zeigt es immer 0 für jeden Buchstaben an, den ich gebe.

Gibt es etwas falsch? Oder vermisse ich etwas mit Arabisch? Ich weiß nicht warum in $french funktioniert gut, wenn ich v eingeben zeigt es 2 im Ergebnis.

+0

vielleicht ist es mit uf8_encode kodiert, und dem Hinzufügen der Zeichensatz? überprüfen Sie, ob diese Antwort http://stackoverflow.com/questions/2309496/php-print-arabic-string –

Antwort

5

Sie müssen Multibyte String Functions verwenden.

Sie können auch mbstring.func_overload = 7 in Ihrem php.ini setzen, und php wird automatisch Multibyte Gegenstücke für Standard-String-Funktionen verwenden.

Blick auf mbstring overloading Dokumentation, wenn Sie für überladene Funktionen einen anderen Wert verwenden, die besser auf Ihre Bedürfnisse

auch passen würde, ersetzen

$characters = str_split($char_string);

mit

$characters = preg_split('//u', $char_string, -1, PREG_SPLIT_NO_EMPTY);

weil str_split ist n ot multibyte sicher und hat keine Alternative

Additionaly, wenn keine Codierung in den Header gesendet wird, nachdem Sie das Formular aus, oder gibt es einige Problem mit ihnen ist, können Sie in der php.ini gesetzt

default_charset = "UTF-8"

+1

Es funktioniert gut :) Danke! –

+0

können Sie den vollständigen Code veröffentlichen. Ich habe deinen ersten Code ausprobiert. Ich bekomme 0 für jeden Buchstaben, den ich suche! – user1788736

2

i getestet Code mit Encoding UTF-8, und es ist Arbeit ..

i'v hinzugefügt, um einen Meta-Tag:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
+0

Entschuldigung ich habe Meta-Tag, ich aktualisierte meine Antwort –

+0

so was ist Ihre Datei-Codierung? ist utf-8? – mehdi

+0

ja alles ist ut-8, datei, editor, ... –