2015-03-09 2 views
1

Я пытаюсь нарисовать случайный японский символ из строки, но когда я его печатаю, он появляется как «?». Вот код:азиатские символы, которые не отображаются должным образом в php/html

$ chars = "あ い う え お か き く け ち ち つ て と さ ら ら";

print $ chars; // < --- РАБОТЫ

$ ranLetter = $ chars [rand (0, strlen ($ chars) -1)];

print $ ranLetter; // < --- НЕ РАБОТАЕТ

Я пытался обновить и мой HTML/PHP страницу с этим:

HTML - PHP - mysql_set_charset ("utf8");

Я также проверил свой файл php.ini, чтобы узнать, установлен ли мой default_charset в UTF8, и это так.

Но ничего не работает, никаких идей?

ответ

3

вам нужно использовать MB безопасные функции, вот один из способов:

<?php 
$chars = "あいうえおかきくけたちつてとさしすせそまみむめもら"; 


function mbStringToArray ($string) { 
    $strlen = mb_strlen($string); 
    while ($strlen) { 
     $array[] = mb_substr($string,0,1,"UTF-8"); 
     $string = mb_substr($string,1,$strlen,"UTF-8"); 
     $strlen = mb_strlen($string); 
    } 
    return $array; 
} 
$new_str=mbStringToArray($chars); 

echo $new_str[array_rand($new_str, 1)]; 

работает демо: http://codepad.viper-7.com/84lcpW

метод 2

$chars = "あいうえおかきくけたちつてとさしすせそまみむめもら"; 

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

//print_r($chars); 

echo $chars[array_rand($chars, 1)]; 

работает демо: http://codepad.viper-7.com/FN8CA0

+0

Привет спасибо , это работает! Я хотел бы знать, как я могу сделать то же самое с кодом, который у меня уже есть, что я знаю, что мне нужно использовать функцию «mb safe». Есть ли эквивалент rand(), безопасный для mb? Еще раз спасибо. – shiri

+0

Рабочая демонстрация не работает для меня, но я могу подтвердить, что ваш код работает. – shiri

+0

работает для меня, может быть ваш браузер кодировки по умолчанию –