2017-05-23 1 views
1

Le résultat de this code:Pourquoi trim() affecte-t-il les autres caractères?

echo trim('سلام؟', '؟'); 

est-�لام.

Pourquoi? Je ne sais même pas ce que est supposé être. D'où cela vient-il?

+2

double possible de (https://stackoverflow.com/questions/10066647/multibyte-trim-in-php – Nadav

+0

[couper la chaîne arabe] (https://stackoverflow.com/q/32680409/6521116) –

Répondre

2

Je pense que cela parce qu'il est langue de droite toleft-, vous pouvez utiliser rtrim()

phpFiddle - Cliquez sur "Exécuter F9" pour exécuter

echo rtrim('سلام؟', '؟'); 
+0

Oui, 'rtrim()' fonctionne également dans ce cas. Mais pas toujours https://3v4l.org/12vXl –

+0

nous n'avons pas de point d'interrogation avant le mot dans le langage rtl, donc '? سلام' n'est pas un" valide "de toute façon –

+0

ha ha ha ... vous avez raison. mais ce serait beaucoup mieux si je pouvais le vérifier aussi. –

0

Vous pouvez utiliser rtrim().

Ceci supprimera l'espace blanc de l'extrémité de la chaîne.

echo rtrim('سلام؟', '؟');

Et votre problème résolu ..

0

Votre chaîne caractère est arabe, qui est dans l'ordre inverse. Donc vous devez utiliser rtrim().

1

rtrim est de remplacer du côté droit de la chaîne et c'est OK pour l'exigence OP. Mais je pense que str_replace() est plus approprié. Trim peut être fait par elle, également utile pour remplacer de n'importe quelle position de chaîne. Un exemple:

$search = ['؟', ' ',]; // Add more elements if required 
$str = 'سلام؟'; 
$output = str_replace($search, '', $str); 

echo $output; 

sortie: [? Garniture Multibyte en PHP]

سلام