Php 如何将unicode字符串转换为字符

Php 如何将unicode字符串转换为字符,php,unicode,Php,Unicode,我想将unicode转换为字符 为此,我尝试了这篇文章,但它不适合我 例如: $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'); 输出应该是θανασίον,但上面的方法返

我想将unicode转换为字符

为此,我尝试了这篇文章,但它不适合我

例如:

$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中获取正确的字符?

正则表达式:

$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');
在回显输出之前

正则表达式:

<?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' => 'sender@email.com',
'from_email' => 'receiver@email.com',
'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));
}
$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');

在回显输出之前,它正在工作,但当我将其发送到电子邮件模板时,它在电子邮件中没有正确显示。请查看。您可以尝试在邮件中设置mime和内容类型<代码>文本/html;charset=UTF-8为您的电子邮件查询添加了一个新的答案它正在工作,但当我将其发送到电子邮件模板时,它在电子邮件中没有正确显示。请查看。您可以尝试在邮件中设置mime和内容类型<代码>文本/html;charset=UTF-8为您的电子邮件查询添加了新答案
<?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' => 'sender@email.com',
'from_email' => 'receiver@email.com',
'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));
}