2017-02-14 2 views
-1

Je veux filtrer ma variable et supprimer tous les caractères multi-octets, sauf certains d'entre eux (Une liste de caractères persans que j'ai). Comment pourrais-je faire ça en PHP?
Edit # 1:
Voici mon code de chaîne:Comment supprimer tous les caractères multi-octets en PHP?

// variable 
$str = ' سلامoff3 '; 

// array of persian characters 
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 
     'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 
     'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',]; 

Je veux remplacer tous les caractères multi-octets, sauf caractères perses (il y a des personnages perses et un multioctets caractère caché après chiffre 3).
Éditer # 2:
Le caractère caché n'est pas visible mais dans phpStorm c'est visible. Je pense que StackOverFlow filtre les caractères invalides (ce que je veux faire).

+0

départ en nous montrant la variable et la liste des caractères persans, et ce que vous avez essayé jusqu'à présent. (pas mon down-vote) – JustBaron

+0

Vous devez nous donner quelques informations. quelle est la liste de caractères que vous voulez conserver et quelle est celle que vous voulez supprimer. Aussi, quelle est votre variable. – Nicolas

Répondre

1

La façon simple de le faire serait utilise mb_string:

$str = ' سلامoff3 '; // variable 
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',]; // 
$cleaned = ""; 
for ($i = 0;$i <mb_strlen($str);$i++) { 
    $char = mb_substr($str,$i,1); 
    if (mb_strlen($char) == strlen($char) || in_array($char,$to)) { 
     $cleaned .= $char; 
    } 
} 
print_r($cleaned); 

L'idée est de passer par chaque caractère (via des fonctions mb pour obtenir des caractères réels) et vérifier si elle est soit un seul octet ou dans la liste autorisée avant de l'ajouter à une nouvelle chaîne.

Notez que cette solution nécessite mb_string

+0

Merci beaucoup. C'était une solution judicieuse;) –