php设置字符集-PHP 和 UTF-8_PHP 的最佳实践将字符编码设置为 UTF-82019-02

2023-08-30 0 2,407 百度已收录

《PHP中的字符串、编码、UTF-8》这篇文章介绍了一系列基础知识,比较枯燥。 现在我们来谈谈一些有用的东西——PHP 字符串处理的最佳实践。 本文是“PHP、String、编码、UTF-8”相关知识。 让我们从推论开始 - 在 PHP 的各个方面都使用 UTF-8 编码。

PHP语言级别不支持Unicode字符集,大部分问题都可以通过UTF-8编码来解决。 最好的做法是清楚地知道输入编码(不知道就测一下),内部统一转换为UTF-8编码,输出编码也统一为UTF-8编码。

如何在 PHP 级别处理 UTF-8

操作Unicode字符集时,不一定要安装mbstring扩展,使用相应的函数代替原来的字符串函数。 例如,如果文件编码为 UTF-8 PHP 代码,如果使用 strlen() 函数是错误的,请改用 mb_strlen() 函数。

mbstring扩展的大多数功能都需要基于编码(内部编码)进行处理。 请不要统一使用UTF-8编码。 其中大部分可以在 PHP.INI 中配置。

从PHP5.6开始,default_charset配置可以替代mbstring.http_input、mbstring.http_output。 另一个重要的配置是mbstring.language,默认值是Neutral (UTF-8)。 注意,文件编码和mbstring扩展名的内部编码不是同一个概念。

总之:

PHP.INI中涉及mbstring扩展的部分尽量使用UTF-8。

请使用 mbstring 扩展函数而不是本机字符串操作函数。

使用相关功能时,请不一定了解您所操作的字符的编码。 使用相应函数时,显示UTF-8编码参数,如htmlentities()函数的第三个参数。 写入 UTF-8。

文件IO操作如何处理UTF-8

这里有一个反例,如果你要打开一个文件,并且你不知道文件内容是什么编码,你该如何处理? 最佳做法是打开时统一转换为UTF-8,更改内容后再切换为原来的编码并保存到文件中。 我们看一下代码:

php设置字符集-PHP 和 UTF-8_PHP 的最佳实践将字符编码设置为 UTF-82019-02

if ( mb_internal_encoding()!="UTF-8") {
    mb_internal_encoding("UTF-8");
}
$file = "file.txt"; //一个编码为gbk的中文文件
$str= file_get_contents($file);
//不管来源是什么编码,统一显示的时候转换为 UTF-8
if (mb_check_encoding($str,"GBK")) 
    $str =  mb_convert_encoding($str,"UTF-8",“GBK”); 
$str ="修改内容";
$str =  mb_convert_encoding($str,$srcbm,"UTF-8"); //原样转回去
file_put_contents($file,$str);

Mysql 和 UTF-8 的最佳实践

这个比较简单,首先保证你的Mysql是UTF-8的。 之后Mysql客户端在连接时也保持UTF-8。 具体来说,在PHP中,imysql或PDO扩展连接Mysql时,设置UTF-8作为连接代码。 双方态度一致,平时不会有交锋。 问题。

浏览器和 UTF-8 的最佳实践

这个也比较简单,就是如果你的输出内容是网页,那么你的字符串处理输出应该始终保持为UTF-8; 同时在PHP.INI中明确将default_charset设置为UTF-8; HTML的MetaTag也被明确设定。 标记为 UTF-8。

现在一切都好吗? 不可以,虽然服务器和浏览器允许用户使用UTF-8编码,并且对用户的行为没有约束力。 他可能输入了其他编码的字符,或者上传了其他编码的文件名。 角色,那么我该怎么办? 可以通过 mb_http_input() 和 mb_check_encoding() 函数检查用户的编码,然后在内部转换为 UTF-8。 确保在任何级别,最终处理都是UTF-8编码。 换句话说,你需要有手段知道你的输入是什么编码,处理后的控制输出的编码是UTF-8。

mbstring.encoding_translation 指令和 mb_detect_encoding() 函数已弃用。 毁我久矣。

操作系统和 UTF-8 的最佳实践

由于操作系统的原因,PHP 在处理 Unicode 文件名时有不同的处理机制。 在Linux下,文件名仍为UTF-8编码php设置字符集,在英文Windows环境下,文件名仍为GBK编码。 只要记住这一点。

让我用一个例子来说明:

//命令行程序函数,运行在中文版 Windows 10 操作系统 ,文件编码为 UTF-8
function filenameexample() {
    $filename = "测试.txt" ;
    $gbk_filename = iconv("UTF-8","GBK",$filename);
    file_put_contents($gbk_filename, "测试");
    echo file_get_contents($gbk_filename);
}
function scandirexample() {
    $arr = scandir("./tmp");
    foreach ($arr as $v) {
        if ($v == "." || $v =="..")
            continue ;
        $filename = iconv( "GBK","UTF-8",$v ) ;
        $content = file_get_contents("./tmp/" . $v );
    }
}

如果不想编写兼容Windows和Linux的程序,可以对文件名进行urlencode,例如:

function urlencodeexample() {
    $filename = "测试2.txt" ;
    $urlencodefilename = urlencode($filename) ;
    file_put_contents($urlencodefilename, "测试");
    echo file_get_contents($urlencodefilename);
 }

使用PHP通过header()函数下载文件时,还必须考虑浏览器和操作系统(大多数人使用Windows)。 对于 Chrome,输出文件名编码可以是 UTF-8,Chrome 会手动将文件名转换为 GBK 编码。

对于较低版本的IE,它继承了操作系统环境,因此如果下载的文件名是英文php设置字符集,必须转码为UTF-8编码,否则用户在下载时会听到乱码的文件名。 用代码来说明:

$agent=$_SERVER["HTTP_USER_AGENT"];
if(strpos($agent,´MSIE´)!==false  {
    $filename = iconv("UTF-8","GBK","附件.txt");
    header("Content-Disposition: attachment; filename="$filename"");
}

以上就是Java中从字符串中提取数字的一个简单示例的完整内容。 希望对您有所帮助。

如果该资源对您有帮助并且您通过浏览它受益匪浅,那么您也可以。 您的鼓励是我继续写博客的最大动力。

如果您想获取DD博客最新代码,可以关注DD博客陌陌公众号(ddblogs)

或者您也可以关注我的新浪微博,了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如果您对资源有任何疑问或者觉得还有很大的改进空间,可以在这篇博文中发表评论,希望您能随时寻求建议。

为了保证及时回复,您可以使用博客留言板给我留言:DD博客留言板(dwtedx的留言板)

感谢您的光临。 祝您生活愉快,工作顺利。 欢迎您经常来访。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php设置字符集-PHP 和 UTF-8_PHP 的最佳实践将字符编码设置为 UTF-82019-02 https://www.wkzy.net/game/184702.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务