我正在处理在我的系统上转换重音和特殊字符的困境。
碰巧的是,现在从 BBDD 获得的一些带有重音符号的数据是这样的:�。
奇怪的是,最多可以显示 20 个带有重音符号的数据,但只有一些数据出来,所以SANCI�N
会发生什么?
唯一的办法就是把这个<meta http-equiv="content-type" content="text/html; charset=UTF-8">
但尽管在表格上,在某些情况下,
动态生成的数据给出了该错误
连接数据:
配置文件
;<?php
;die(); // /* No modificar sino sabe lo que hace */
;/*
[database]
driver="mysql"
host="localhost"
port="3306"
schema="bbdd"
username="root"
password="pass"
encode="utf8"
;*/
连接.php:
<?php
<?php
$file = 'config.ini.php';
$config = parse_ini_file($file, true);
$host = $config['database']['host'];
$user = $config['database']['username'];
$pass = $config['database']['password'];
$schema = $config['database']['schema'];
$encode = $config['database']['encode'];
class conexion extends mysqli
{
public
function __construct($host, $user, $pass, $schema)
{
parent::__construct($host, $user, $pass, $schema);
if (mysqli_connect_error())
{
die();
}
}
}
$conexion = new conexion($host, $user, $pass, $schema);
mysqli_set_charset( $conexion, $encode);
?>
当编码无法呈现我们的信息时,有必要走回数据的路径以确定问题出在哪里。
当我说返回路径时,我的意思是我们必须从表面开始检查并深入到调试问题。返回路径的一个示例是:
我认为它是一种智能调试方法,因为在这种情况下,我们屏幕上显示的数据是通过服务器语言从数据库中获取并显示在屏幕上的。如果我们按此顺序进行审查,我们将始终深入问题的根源,但要按层次进行。这是合乎逻辑的:如果不通过表面,您就无法深入了解:)
另外,这里最宝贵的是数据,所以我们越少接触或改变它越好。这也意味着在创建数据库时正确配置数据库本身以及每个表和每个列是非常重要的......这样我们就不必操纵它的结构,这可能是一个风险,特别是如果数据库已经有信息,因为众所周知,我们可能会丢失它或导致数据错误……但那是另一回事。
所以我们从上到下开始检查,看看问题出在哪里。
注意:在开始这条返回路径之前,让我们考虑一下可能的0 级审查。如果我们在任何文本编辑器(如记事本或其他)中处理我们的内容,则文档编码可能不够充分。因此,根据发布者的不同,检查我们文件中设置的编码是明智的。这只是在我们从编辑器中获取文本的情况下。
此级别 0很重要,特别是如果我们在编辑器中错误配置了编码,并且我们计划继续使用我们不需要的编码在数据库中输入数据。
HTML 配置
<head>
:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
服务器配置(PHP 或其他)
在 PHP 的情况下:
我们可以使用
mb_internal_encoding
:mb_internal_encoding("UTF-8");
或者:(
default_charset
从 PHP 5.6+ 开始,它被设置为UTF-8
默认值)。ini_set("default_charset", "UTF-8");
在 MySQLi 的情况下
见:mysqli::set_charset
在 PDO 的情况下
可以通过将以下属性发送到连接参数来完成:
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"
. 例子:也可以通过将字符集放入 DSN 字符串中来完成,如本PHP Manual Note中所述。例如:
我会按照从 1 到 4 的顺序进行调试。
既然你说在某些情况下它看起来是正确的,那么问题似乎在第 3 级。
验证当您连接到数据库时,您将编码设置为 UTF-8。
问候,您是否尝试过使用 utf8-default 排序规则。
如果您不想更改网页的编码,可以编写以下代码:
https://www.gestiweb.com/?q=content/problemas-html-acentos-y-eñes-charset-utf-8-iso-8859-1
从数据库中提取我的一种产品的标题时,我遇到了同样的问题。事实证明,该产品以Occasion这个词结尾,但这个产品以这种方式向我展示了它。
问题是因为我使用了一个名为substr()的 PHP 函数,发现这个函数不尊重UTF-8字符。
所以我决定放另一个 PHP 函数,它的使用方式与前面提到的相同,这个函数被称为mb_substr()一旦我把这个函数放在我的项目中,我就不再遇到奇怪字符的烦人问题了。
例子:
您不必成为专家就能意识到两者的使用方式相同,它们的工作相同,就是缩短很长的文本,只是一个尊重UTF-8字符,另一个不尊重。
希望我的回答对你有很大帮助,问候