如何在PHP/MySQL中正确获取字符集


How to get charset right in PHP/MySQL?

我做过一些基于PHP/MySQL的web项目,迟早,我总是有字符集问题。

我住在西班牙,我们这里有一些特殊的字符:ç ñ í ó和ú

变量太多了,字符集总是乱糟糟的:

  • MySQL数据库排序
  • PHP/HTML标题
  • Web浏览器编码设置
  • PHP设置
  • Apache设置

我想要的是一个关于如何设置一切的基本指南,这样我就不会有这些西班牙语字符的问题。

我有三种方式填充我的HTML输出:

  • 我用PHP查询MySQL数据库,并回显输出
  • 我直接用HTML写一些字,例如

    <p>Qué rábanos pasaría mañana</p>
    
  • 我用parse_ini_file($file)读取label .ini文件;标签文件看起来像这样:

    SORTING_ENTITY = Línea de negociosorting_复数= Líneas de negocioMAIN_ENTITY = Instalaciónmain_复数= Instalaciones

所以当我查看网站时,有时MySQL生成的文本混乱,有时直接HTML混乱,有时一切正常,但来自。ini文件的内容混乱。

有时,我也使用web表单,以便用户输入保存在MySQL中的数据。例如,用户在web表单中写入"Pájaro",而一些不正确的字符则存储在数据库中,如"P}jaros"或类似的字符。

我想有一些指导方针,以便一切都以一种方式设置,即无论我在直接HTML或。ini文件中写什么都显示在网站上,无论用户在web表单中写什么都正确存储,并且在以后读取此数据时也以相同的方式显示。

我不想用这样的东西:

&aacute;
&ntilde;
echo  utf8_encode($dat);  

在HTML中head元素总是包含

<meta charset="UTF-8"/> 
在PHP中输出UTF-8字符

header("Content-type: 'text/html'; Charset='UTF-8');

另外,请记住在每个PHP脚本的顶部放置头文件

对于PHP CRUD(创建,读取,更新,删除)使用以下代码

$conObj = new mysqli("", "", "", "");
    $conObj->query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

试着用这个"查询"函数创建一个类(叫它编码器或任何你喜欢的),所以每当你创建这个类的对象时,这个函数将自动执行,你将不必硬编码它并在每个连接实例/对象下编写。