我正在设置一个新服务器,并希望在我的Web应用程序中完全支持UTF-8.我过去曾在现有的服务器上尝试过此操作,但最终似乎不得不回归ISO-8859-1.
我在哪里需要设置编码/字符集?我知道我需要配置Apache,MySQL和PHP来执行此操作 - 是否有一些我可以遵循的标准清单,或者可能是在出现不匹配的地方进行故障排除?
这适用于运行MySQL 5,PHP,5和Apache 2的新Linux服务器.
我有一个php文件,其中包含以下文本:
<div class="small_italic">This is what you´ll use</div>
Run Code Online (Sandbox Code Playgroud)
在一台服务器上,它显示为:
This is what you´ll use
Run Code Online (Sandbox Code Playgroud)
另一方面,如:
This is what you?ll use
Run Code Online (Sandbox Code Playgroud)
为什么会有差异,我该怎么做才能使它显得正确(作为撇号)?
所有人的注意事项(供将来参考)
我实现了Gordon/Gumbo的建议,除了我在服务器级别而不是应用程序级别实现它.请注意,(a)我不得不重新启动apache服务器,更重要的是,(b)我必须用正确编码中的校正数据替换现有的"坏数据".
/etc/php.ini中
default_charset ="iso-8859-1"
这是我的PDO课程的一部分.我需要使用utf-8希伯来语,但当我设置ATTR_PERSISTENT为true输出文本将显示??????如果我切换ATTR_PERSISTENT到false输出将是正确的.
public function __construct() {
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => true
);
// Create a new PDO instanace
try {
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch (PDOException $e) {
$this->error = $e->getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
之间是否有任何冲突:
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET …Run Code Online (Sandbox Code Playgroud)