2017-04-19 175 views
0

我想將unicode轉換爲字符。如何將unicode字符串轉換爲字符

對此,我試過https://stackoverflow.com/a/7278961/4073217後,但它不適合我。

例如:

$string = '%u0391%u03b8%u03b1%u03bd%u03b1%u03c3%u03af%u03bf%u03c5'; 
$string = preg_replace('/%u([0-9A-F]+)/', '&#x$1;', $string); 
echo html_entity_decode($string, ENT_COMPAT, 'UTF-8'); 

輸出應該是Αθανασίου但上述方法返回Αb8b1bdb1c3afbfc5

我做錯了什麼?如何從PHP中的Unicode獲取正確的字符?

回答

4

的正則表達式:

$string = preg_replace('/%u([0-9A-F]+)/', '&#x$1;', $string)具有A-F,這意味着它只能0-9後,大寫字母A-F的字符進行比較。既然你有所有的小角色匹配失敗。試試:

$string = preg_replace('/%u([0-9a-f]+)/', '&#x$1;', $string); 

改爲。

同時檢查瀏覽器輸出是否爲utf-8。如果沒有可以使用頭:

header('Content-type: text/html; charset=utf-8'); 

呼應輸出

+0

這是一個很好的答案 –

+0

謝謝你,爲工作我。 –

+0

它正在工作,但是當我將它發送到電子郵件模板時,它無法在電子郵件中正確顯示。 –

1
<?php 
header('Content-type: text/html; charset=utf-8'); 

$string = '%u0391%u03b8%u03b1%u03bd%u03b1%u03c3%u03af%u03bf%u03c5'; 
$string = preg_replace('/%u([0-9a-f]+)/', '&#x$1;', $string); 

echo html_entity_decode($string, ENT_COMPAT, 'UTF-8'); 

$arr = [ 
'to_email' => '[email protected]', 
'from_email' => '[email protected]', 
'subject' => 'utf', 
'message' => $string 
]; 

mail_send($arr); 

function mail_send($arr) 
{ 
    if (!isset($arr['to_email'], $arr['from_email'], $arr['subject'], $arr['message'])) { 
     throw new HelperException('mail(); not all parameters provided.'); 
    } 

    $to   = empty($arr['to_name']) ? $arr['to_email'] : '"' . mb_encode_mimeheader($arr['to_name']) . '" <' . $arr['to_email'] . '>'; 
    $from  = empty($arr['from_name']) ? $arr['from_email'] : '"' . mb_encode_mimeheader($arr['from_name']) . '" <' . $arr['from_email'] . '>'; 

    $headers = array 
    (
     'MIME-Version: 1.0', 
     'Content-Type: text/html; charset="UTF-8";', 
     'Content-Transfer-Encoding: 7bit', 
     'Date: ' . date('r', $_SERVER['REQUEST_TIME']), 
     'Message-ID: <' . $_SERVER['REQUEST_TIME'] . md5($_SERVER['REQUEST_TIME']) . '@' . $_SERVER['SERVER_NAME'] . '>', 
     'From: ' . $from, 
     'Reply-To: ' . $from, 
     'Return-Path: ' . $from, 
     'X-Mailer: PHP v' . phpversion(), 
     'X-Originating-IP: ' . $_SERVER['SERVER_ADDR'], 
    ); 

    mail($to, '=?UTF-8?B?' . base64_encode($arr['subject']) . '?=', $arr['message'], implode("\n", $headers)); 
} 

在此之前會打印出在瀏覽器和電子郵件ΑθανασίουΑθανασίου電子郵件

+0

vinaya-maheshwari希望它的工作 –

相關問題