2013-03-06 2 views
2

Я уже некоторое время работаю с арабскими персонажами. Посмотрите на это:Получить последнее письмо из арабской строки Php

$string = "السلام"; 

отлично работает, когда я печатаю его.

Но. Я хочу получить последнее письмо «م». Я попытался

$string[strlen($string]-1)]; 

Пробовал подстроки тоже.

Получение этот выход:

РЕШИТЬ: Забыл добавить: mb_internal_encoding ("UTF-8"); Спасибо большое, ребята!

ответ

3

Вы пытаетесь использовать операции байтового типа на строке многобайтной (UTF-8 -16?) Вы должны использовать мб _ *() функцию для работы с многобайтовыми строками: http://php.net/mb_substr

+0

К сожалению, то, что я пытался написал STRLEN по ошибке, такой же результат. – Kilise

+0

mb_internal_encoding («UTF-8»); Забыл тот. – Kilise

+0

Я не думаю, что PHP всегда поддерживает языки RTL. строковый LTR во внутреннем представлении PHP. 'mb_substr ($ str, 0, 1)' вероятно, что вы действительно хотите. –

1

Вы должны использовать mb_strlen для многобайтовых строк. Эти символы принимают более одного байта, поэтому, когда вы извлекаете их с помощью собственных функций, отличных от mb, вы берете только одну часть символа, что обычно является некоторой тарабарщиной. mb_* функции заботятся об этом.

+1

@Cthulhu - Я вижу, что армия Ктулху завоевывает мир;) – cth

+1

да действительно !!! : D –

2

Попробуйте это:

<?php 
mb_internal_encoding("UTF-8"); 
$string = "السلام"; 
echo mb_substr($string, -1); 
?> 

Ваш код также не правильно (есть ошибка синтаксиса):

$string[strlen($string]-1)]; 
         ^--should be) 

$string[strlen($string)-1)]; 
+0

Спасибо, mb_internal_encoding ("UTF-8"); это именно то, что я забыл – Kilise

Смежные вопросы