我正在设置一个新服务器,并希望在我的Web应用程序中完全支持UTF-8.我过去曾在现有的服务器上尝试过此操作,但最终似乎不得不回归ISO-8859-1.
我在哪里需要设置编码/字符集?我知道我需要配置Apache,MySQL和PHP来执行此操作 - 是否有一些我可以遵循的标准清单,或者可能是在出现不匹配的地方进行故障排除?
这适用于运行MySQL 5,PHP,5和Apache 2的新Linux服务器.
我正在尝试在MySQL表中插入Cyrillic值,但编码存在问题.
PHP的:
<?php
$servername = "localhost";
$username = "a";
$password = "b";
$dbname = "c";
$conn = new mysqli($servername, $username, $password, $dbname);
mysql_query("SET NAMES 'utf8';");
mysql_query("SET CHARACTER SET 'utf8';");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE `c`.`mainp` SET `search` = 'test ????' WHERE `mainp`.`id` =1;";
if ($conn->query($sql) === TRUE) {
}
$conn->close();
?>
Run Code Online (Sandbox Code Playgroud)
MySQL的:
| id | search |
| 1 | test ав |
Run Code Online (Sandbox Code Playgroud)
注意:PHP文件是utf-8,数据库排序规则utf8_general_ci
我有以下两个字符串:
$str1 = 'O?';
$str2 = 'Ö';
$e1 = mb_detect_encoding($str1);
$e2 = mb_detect_encoding($str2);
var_dump($str1);
var_dump($str2);
echo 'e1: '.$e1.', e2: '.$e2;
Run Code Online (Sandbox Code Playgroud)
结果是:
string(3) "O?"
string(2) "Ö"
e1: UTF-8, e2: UTF-8
Run Code Online (Sandbox Code Playgroud)
看来它们不仅是德语字符,而且每个字符都不相同,因此可以将它们转换为ASCII
PHP:用UTF-8字符串中最接近的7位ASCII等效字符替换变音符号
不会产生相等的结果。有没有办法既这些字符串转换为这些ASCII形式之一BNOE或BNO?
我知道也许我可以从这两者中复制Ö并包括在strtr搜索和替换数组中,但是我不知道如何以与第一个Ö相同的方式来再现所有编码的字符。