Sfi*_*oza 14 php unicode webserver utf-8 character-encoding
UTF-8现在是Web应用程序的事实标准,但PHP不是PHP的默认编码(直到6.0).默认情况下,大多数服务器都设置为ISO-8859-1编码.
如何重载默认设置.htaccess以确保UTF-8,语言环境等一切顺利?Web服务器的任何选项,Unix操作系统?
这些设置有没有全面的清单?例如mbstring选项,iconv设置,区域设置等我应该为每个多语言项目设置?任何预先定义.htaccess的例子?
(在我的特殊情况下,我需要设置语言:英语,荷兰语和俄语.服务器在乌克兰).
tak*_*hin 15
一些有用的选项.htaccess:
########################################
# Locale settings
########################################
# See: http://php.net/manual/en/timezones.php
php_value date.timezone "Europe/Amsterdam"
SetEnv LC_ALL nl_NL.UTF-8
########################################
# Set up UTF-8 encoding
########################################
AddDefaultCharset UTF-8
AddCharset UTF-8 .php
php_value default_charset "UTF-8"
php_value iconv.input_encoding "UTF-8"
php_value iconv.internal_encoding "UTF-8"
php_value iconv.output_encoding "UTF-8"
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_output UTF-8
php_value mbstring.encoding_translation On
php_value mbstring.func_overload 6
# See also php functions:
# mysql_set_charset
# mysql_client_encoding
# database settings
#CREATE DATABASE db_name
# CHARACTER SET utf8
# DEFAULT CHARACTER SET utf8
# COLLATE utf8_general_ci
# DEFAULT COLLATE utf8_general_ci
# ;
#
#ALTER DATABASE db_name
# CHARACTER SET utf8
# DEFAULT CHARACTER SET utf8
# COLLATE utf8_general_ci
# DEFAULT COLLATE utf8_general_ci
# ;
#ALTER TABLE tbl_name
# DEFAULT CHARACTER SET utf8
# COLLATE utf8_general_ci
# ;
Run Code Online (Sandbox Code Playgroud)
你是对的,UTF-8是网络应用的不错选择.
编码是获得处理的数据的元信息.只要你知道(二进制)数据的编码,就知道你在处理什么.如果您不知道编码,就会开始迷路.我经常将其称为链,如果编码链断开,数据将被破坏.这对于显示数据和安全性都是如此.
根据经验,PHP是二进制的,它是指定编码的上下文/你(例如你如何保存你的php源代码文件).
那么让我们来处理一个简短(不完整)的列表:
环境变量可能会告诉您正在使用的语言环境和编码.例如,文件系统对文件和目录的名称进行编码.我对这个主题不是很坚定,通常我们会尝试用英语命名我们的文件,所以只使用US-ASCII拉丁语扩展字符集安全范围内的字符,就像ISO-8859-1你的情况一样UTF-8.
只要记住这一点,当您保存用户上传的文件:刚过滤的文件名基本字母和punctation,你就会有几乎没有麻烦(a-z,A-Z,0-9,.,-,_),甚至让他们全部小写视觉的目的.
如果您认为这会降低可用性并且文件系统不提供UTF-8中的unicode字符范围,您可以回退到简单编码rawurlencode(如Percent-Encoding,triplet)并通过将该名称解析为提供要下载的文件磁盘.
通常你只需要处理你拥有的东西.开始向常见的系统管理员或程序员询问字符编码,大多数人都会告诉你他们并不是真正感兴趣.当然这是主观的,但如果你需要有人为你配置一些东西,这可能会有所不同.
这仅仅是PHP独立的,它是关于脚本提供的输出所以工作领域.
经验法则是:指定它.如果你没有指定它(HTML文件,CSS文件,Javascript文件),不要指望它能正常工作.那就做吧.编码是一个链,如果有很多组件,确保每个人都知道它的编码.否则浏览器只能猜测.UTF-8这是一个很好的选择,但我们的工作是保持谨慎并使其精确定义.
作为一般经验法则,请开始阅读php.inilinux发行版的PHP包附带的文件.它附带可读文档的评论和更多链接.我想到的一些设置:
default_charset- PHP 始终在Content-type:标头中输出默认的字符编码.要禁用发送charset,只需将其设置为空(Source).有关一般信息,请参阅设置HTTP字符集参数W3C.如果要改善站点的输出,例如,当用户使用浏览器保存输出时保留编码信息,还要<meta http-equiv="Content-type" content="text/html;charset=UTF-8">添加HTML http-equiv元标记.output_handler- 这个设置值得一看,因为它指定了输出处理程序(Output Buffering Control Docs),每个处理程序(mb,iconv)都可以拥有自己的编码设置(参见字符串).$binary = (binary) $string;或$binary = b"binary string";.mb_internal_encoding()文件 - 获得或设置它; mbstring.internal_encodingINI.内部编码是用于HTTP输入字符编码转换的字符编码名称,HTTP输出字符编码转换以及mbstring模块定义的字符串函数的默认字符编码.iconv_set_encoding()文档 - 可与iconv扩展名相媲美.另请参阅iconv配置设置.htmlspecialcharsDocs.使用这些参数并检查文档的默认值.通常它是,ISO-8859-1但你正在寻找UTF-8.html_entity_decodeDocs等其他功能UTF-8默认使用.有些人htmlspecialchars_decode根本不指定字符集,因此您需要阅读PHP源代码,以便具体了解函数如何处理(二进制)字符串.回答您的问题:设置和参数的需要总是取决于您使用的组件.对于浏览器或网络服务器等常规设备,可以提供推荐设置以配置它UTF-8.但其他一切都取决于它.最重要的是寻找它并确保您知道编码并可以配置/指定它.通常它是记录在案的.只要您不需要处理可移植代码,就可以更加简单,因为您可以控制环境,或者只需要处理特定环境.编写代码时考虑到编码的防御性,你应该没问题.