PHP之mb_convert_encoding使用

本文介绍PHP中的mb_convert_encoding函数,用于转换字符串的字符编码。包括从一种编码转换到另一种编码的方法,以及如何自动检测源编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mb_convert_encoding

  • (PHP 4 >= 4.0.6, PHP 5, PHP 7)
  • mb_convert_encoding — Convert character encoding
  • mb_convert_encoding — 转换字符的编码

Description

string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )
//Converts the character encoding of string str to to_encoding from optionally from_encoding.

Parameters

str

  • The string being encoded.
  • 要编码的 string。

to_encoding

  • The type of encoding that str is being converted to.
  • str 要转换成的编码类型。

from_encoding

  • Is specified by character code names before conversion. It is either an array, or a comma separated enumerated list. If from_encoding is not specified, the internal encoding will be used.
  • 在转换前通过字符代码名称来指定。它可以是一个 array 也可以是逗号分隔的枚举列表。 如果没有提供 from_encoding,则会使用内部(internal)编码。

Return Values

  • The encoded string.
  • 编码后的 string。

Examples

<?php
/**
 * Created by PhpStorm.
 * User: zhangrongxiang
 * Date: 2018/1/28
 * Time: 下午10:34
 */

$str = "Hello World\n";
/* Convert internal character encoding to SJIS */
$str = mb_convert_encoding( $str, "SJIS" );
echo "1---" . $str; //1---Hello World

$str = "Hello World\n";
/* Convert EUC-JP to UTF-7 */
$str = mb_convert_encoding( $str, "UTF-7", "EUC-JP" );
echo "2---" . $str; //2---Hello World

$str = "Hello World\n";
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding( $str, "UCS-2LE", "JIS, eucjp-win, sjis-win" );
echo "3---" . $str; //3---H e l l o   W o r l d 

$str = "Hello World\n";
/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
$str = mb_convert_encoding( $str, "EUC-JP", "auto" );
echo "4---" . $str; /// 4---Hello World


/**遍历字符集 */
$text = "A strange string to pass, maybe with some ø, æ, å characters. Hello 中国";
foreach ( mb_list_encodings() as $chr ) {
    /**其他字符集转换成UTF-8输出*/
    echo $chr . " :" . mb_convert_encoding( $text, 'UTF-8', $chr ) . PHP_EOL;
    /**UTF-8转换成其他字符集输出*/
    echo $chr . " :" . mb_convert_encoding( $text, $chr, 'UTF-8' ) . PHP_EOL;
}

/**强制浏览器输出UTF-8编码字符串*/
header( "content-Type: text/html; charset=Utf-8" );//在所有输出之前输出有效
echo mb_convert_encoding( "你是我的好朋友", "UTF-8", "GBK" );

/**支持的字符编码*/
//UCS-4*
//UCS-4BE
//UCS-4LE*
//UCS-2
//UCS-2BE
//UCS-2LE
//UTF-32*
//UTF-32BE*
//UTF-32LE*
//UTF-16*
//UTF-16BE*
//UTF-16LE*
//UTF-7
//UTF7-IMAP
//UTF-8*
//ASCII*
//EUC-JP*
//SJIS*
//eucJP-win*
//SJIS-win*
//ISO-2022-JP
//ISO-2022-JP-MS
//CP932
//CP51932
//SJIS-mac** (别名: MacJapanese)
//SJIS-Mobile#DOCOMO** (别名: SJIS-DOCOMO)
//SJIS-Mobile#KDDI** (别名: SJIS-KDDI)
//SJIS-Mobile#SOFTBANK** (别名: SJIS-SOFTBANK)
//UTF-8-Mobile#DOCOMO** (别名: UTF-8-DOCOMO)
//UTF-8-Mobile#KDDI-A**
//UTF-8-Mobile#KDDI-B** (别名: UTF-8-KDDI)
//UTF-8-Mobile#SOFTBANK** (别名: UTF-8-SOFTBANK)
//ISO-2022-JP-MOBILE#KDDI** (别名: ISO-2022-JP-KDDI)
//JIS
//JIS-ms
//CP50220
//CP50220raw
//CP50221
//CP50222
//ISO-8859-1*
//ISO-8859-2*
//ISO-8859-3*
//ISO-8859-4*
//ISO-8859-5*
//ISO-8859-6*
//ISO-8859-7*
//ISO-8859-8*
//ISO-8859-9*
//ISO-8859-10*
//ISO-8859-13*
//ISO-8859-14*
//ISO-8859-15*
//ISO-8859-16*
//byte2be
//byte2le
//byte4be
//byte4le
//BASE64
//HTML-ENTITIES
//7bit
//8bit
//EUC-CN*
//CP936
//GB18030**
//HZ
//EUC-TW*
//CP950
//BIG-5*
//EUC-KR*
//UHC (CP949)
//ISO-2022-KR
//Windows-1251 (CP1251)
//Windows-1252 (CP1252)
//CP866 (IBM866)
//KOI8-R*
//KOI8-U*
//ArmSCII-8 (ArmSCII8)
// * 表示该编码也可以在正则表达式中使用。
// ** 表示该编码自 PHP 5.4.0 始可用。
//任何接受编码名称的 php.ini 条目同样也可以使用 "auto" 和 "pass" 的值。 接受编码名的 mbstring 函数同样也可以使用值 "auto"。
//如果设置了 "pass",将不会对字符的编码进行转化。
//如果设置了 "auto",它将扩展成 NLS 中定义的每个字符编码列表。 比如,假设 NLS 设置为 Japanese,值将会认为是 "ASCII,JIS,UTF-8,EUC-JP,SJIS"。

文章参考

转载于:https://www.cnblogs.com/zhangrxiang/p/8372848.html

### PHP `mb_convert_encoding` 函数使用方法 #### 函数定义与基本语法 `mb_convert_encoding` 是一个多字节字符串编码转换函数,在处理不同字符集间的转换时非常有用。此函数可以将给定的字符串按照指定的目标编码进行转换[^1]。 ```php string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] ) ``` - `$str`: 需要被转换编码的原始字符串。 - `$to_encoding`: 转换后的目标编码格式,比如 'UTF-8' 或者其他支持的编码形式。 - `$from_encoding`: 可选参数;如果提供,则表示源字符串所使用的具体编码类型。也可以是一个数组来尝试多种可能的输入编码。 #### 实际应用案例 当遇到网页抓取或其他场景下的文本数据存在未知或不一致的编码情况时,可以通过如下方式解决问题: 假设有一个来自外部资源的内容可能是GB2312编码,现在希望将其转为统一的标准UTF-8编码以便后续操作: ```php $originalContent = file_get_contents('http://example.com/page'); // 获取页面内容 // 尝试从 GB2312 到 UTF-8 的转换 $convertedContent = mb_convert_encoding($originalContent, "UTF-8", "GBK"); echo htmlspecialchars($convertedContent); // 输出并防止XSS攻击 ``` 这段代码展示了如何利用 `mb_convert_encoding()` 来确保获取到的数据是以期望的形式呈现出来的[^3]。 #### 常见问题解决方案 对于一些特定情况下可能出现的问题,这里给出几个实用技巧: ##### 无法识别原编码怎么办? 有时并不清楚确切的初始编码是什么样的时候,可以直接传递一个包含多个候选编码类型的列表作为第三个参数,让PHP自动检测最合适的那个: ```php $textWithUnknownEncoding = "..."; // 不明编码的文字串 $supportedEncodings = ["ASCII", "JIS", "EUC-JP", "SJIS", "UTF-8"]; $resultText = mb_convert_encoding($textWithUnknownEncoding, "UTF-8", $supportedEncodings); ``` 这样即使不确定原来的编码也能较好地完成转换过程。 ##### 处理HTML实体化输出 为了避免潜在的安全风险(如跨站脚本漏洞),通常会在显示之前先对特殊字符做适当转义: ```php $safeOutput = htmlspecialchars(mb_convert_encoding($unsafeInput, "UTF-8"), ENT_QUOTES | ENT_HTML5, "UTF-8"); print($safeOutput); ``` 通过这种方式既实现了编码标准化又增强了安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值