2016-09-02 4 views
1

날짜를 러시아어로 번역하고 형식을 변경하고 싶습니다. str_replace('Сентября', 'September', $date);을 사용할 때 날짜 기능으로 나중에 오류가 발생하여 제안하기 때문에 작동하지 않습니다. \xD1\x81\xD0\xB5\xD0\xBD\xD1\x82\xD1\x8F\xD0\xB1\xD1\x80\xD1\x8FPHP UTF-16 문자 및 str_replace

문자열은 UTF-8이 아니라 UTF-16입니다. 내 호스트가 지원하지 않는 mb_convert_encoding을 사용하지 않고 어떻게 문자열을 UTF-8로 변환 할 수 있습니까? 또한 LE는 BE와 iconv('UTF-16', 'UTF-8', $date);을했지만, 어느 쪽 오류 출력은 매달이 같은 연관 배열을 구축하려고이

Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (1 сентября 2016 00:00) 

DateTime->__construct('1 \xD1\x81\xD0\xB5\xD0\xBD\xD1\x82\xD1\x8F\xD0\xB1\xD1...', Object(DateTimeZone)) # 

답변

0

과 같은

도왔다. 그런 다음 러시아 달 이름을 배열 키로 사용할 수 있으며 미국의 해당 키를 반환합니다. 희망이 도움이됩니다.

$translator = array("Сентября" => "September"); 

echo $translator["Сентября"]; 

편집 :

$str = '1 cентября 2016 00:00'; 
$russian_month = explode(' ', strtolower($str))[1]; 

$translator = array("cентября" => "September"); 
echo $translator[$russian_month]; 

이 달은 항상 나타나는 것으로 가정 : 당신이 할 수있는 예에 지정된

날짜에서 월을 당겨하려면 같은 순서 (일 월 년 hh : mm). 또한 소문자로 인덱스를 입력하는 것이 좋습니다.


'9 월'을 UTF-16으로 변환 한 다음 바꾸기가 작동하는 것처럼 보입니다. 여기에 다른 방법이 있습니다.

function translateDate($from, $to, $str){ 
    $from = iconv('UTF-8','UTF-16BE', $from); 
    $to = iconv ('UTF-8', 'UTF-16BE' , $to); 
    $str = iconv ('UTF-8', 'UTF-16BE' , $str); 

    $new = str_ireplace($from, $to, $str); 
    return iconv ( 'UTF-16BE', 'UTF-8', $new); 
} 

echo translateDate('сентября', 'September', '1 сентября 2016 00:00'); 
+0

원래 작동하지 않는 이유는 무엇입니까? :) – Jord123

+0

str_replace는 혼합 문자 세트에서 작동하지 않습니다. 그러나 아직 방법이 있습니다. 그래서 저는 제 대답을 편집하고 추가 방법을 추가 할 것입니다. – DragonSpirit

+0

더 정확하게'str_replace'는 charsets에 대해 신경 쓰지 않습니다 - 그것은 바이트에서 작동합니다. 바이트가 일치하면'str_replace'가 매치합니다. (문자를 잊어 버리고 PHP에서 문자열을 바이트 단위로 생각하면 많은 것들이 훨씬 더 의미가 있습니다.) –