PHP UTF-16 字符和 str_replace
PHP UTF-16 characters and str_replace
我想从俄语翻译一个日期,然后更改其格式。当我使用 str_replace('Сентября', 'September', $date);
时它不起作用,因为稍后日期函数通过抛出包含 \xD1\x81\xD0\xB5\xD0\xBD\xD1\x82\xD1\x8F\xD0\xB1\xD1\x80\xD1\x8F
的错误来建议
该字符串不是 UTF-8,而是 UTF-16。如何在不使用主机不支持的 mb_convert_encoding 的情况下将字符串转换为 UTF-8?我也尝试 iconv('UTF-16', 'UTF-8', $date);
使用 LE BE,但都没有帮助
错误输出如下所示
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)) #
尝试为每个月构建一个这样的关联数组。然后您可以使用俄罗斯月份名称作为数组键,它将 return 美国等效。希望这有帮助。
$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)。我还建议使用小写字母输入索引。
将 'September' 转换为 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');
我想从俄语翻译一个日期,然后更改其格式。当我使用 str_replace('Сентября', 'September', $date);
时它不起作用,因为稍后日期函数通过抛出包含 \xD1\x81\xD0\xB5\xD0\xBD\xD1\x82\xD1\x8F\xD0\xB1\xD1\x80\xD1\x8F
该字符串不是 UTF-8,而是 UTF-16。如何在不使用主机不支持的 mb_convert_encoding 的情况下将字符串转换为 UTF-8?我也尝试 iconv('UTF-16', 'UTF-8', $date);
使用 LE BE,但都没有帮助
错误输出如下所示
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)) #
尝试为每个月构建一个这样的关联数组。然后您可以使用俄罗斯月份名称作为数组键,它将 return 美国等效。希望这有帮助。
$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)。我还建议使用小写字母输入索引。
将 'September' 转换为 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');