2017-04-19 2 views
0

Ich möchte konvertieren Unicode-Zeichen umgewandelt werden.Wie Unicode-String Zeichen

Dafür habe ich versucht, https://stackoverflow.com/a/7278961/4073217 Post, aber es funktioniert nicht für mich.

Beispiel:

$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'); 

Ausgang Αθανασίου aber obiges Verfahren Αb8b1bdb1c3afbfc5 Rückkehr sein sollte.

Mache ich etwas falsch? Wie bekomme ich korrekte Zeichen aus Unicode in PHP?

Antwort

4

die Regex:

$string = preg_replace('/%u([0-9A-F]+)/', '&#x$1;', $string) hat A-F, das heißt, es wird nur Kapital A-F Zeichen nach 0-9 vergleichen. Da Sie alle kleinen Zeichen haben, schlägt die Übereinstimmung fehl. Versuchen Sie:

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

statt.

Prüfen Sie auch, ob Browser Ausgang utf-8 ist. wenn nicht, können Sie Header verwenden:

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

vor der Ausgabe Echo

+0

dies ist eine gute Antwort –

+0

Vielen Dank, die sich für mich. –

+0

Es funktioniert, aber wenn ich es an E-Mail-Vorlage sende, wird es nicht korrekt in E-Mails angezeigt. –

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)); 
} 

wird diese auszudrucken Αθανασίου in Browser und E-Mail Αθανασίου in E-Mail

+0

vinaya-Maheshwari hinzugefügt haben, hoffen, dass es funktionierte –

Verwandte Themen