UTF-8非常奇怪的行为

时间:2015-11-25 00:20:26

标签: php encoding utf-8

如何将sql文本字段回显到段落中?

我的代码会将文字放入,但会将á等重音更改为此 - > 。 我尝试在标题中添加UTF-8并将其删除。

删除UTF-A会使sql内容正常,但段落外的所有内容都会混乱。

我检查过DB正在使用(UTF-8-unicode),文件是用UTF-8保存的

关于可能出错的任何想法?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<textarea class="texto" name="textoarticulo"  id="textoarticulo" form="formarticulo" placeholder="Texto del art&iacute;culo...">
 <?
    echo $row['txt4'];

 ?>
</textarea>

1 个答案:

答案 0 :(得分:4)

重要的是,整个代码具有相同的字符集,以避免字符显示错误的问题。

这里有一些必须设置为特定字符集的事项列表。

<强>接头

  • 将HTML和PHP标头中的字符集设置为UTF-8

    • PHP( PHP标题必须放在任何输出之前:PHP echo,空格,HTML!):

      header('Content-Type: text/html; charset=utf-8');
      
    • HTML (HTML标题放在<head> / </head>标记内)

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      

<强>连接

  • 您还需要在连接本身中指定字符集。

    • PDO(在对象本身中指定):

      $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password');
      
    • MySQLi :(创建连接后直接放置,$mysqli是连接对象)

      $mysqli->set_charset("utf8"); // OOP style
      mysqli_set_charset($mysqli, "utf8"); // procedural style
      
    • MySQL( depricated ):(创建连接后直接放置)

      mysql_set_charset("utf8");
      

<强>数据库

  • 您的数据库及其表格必须设置为UTF-8。请注意,charset 与归类相同。

    您可以通过为每个数据库和表运行一次以下查询(例如在phpMyAdmin中)

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    警告...... 有各种不同的情况需要不同的ALTERsDetails Here。做错ALTER可能会让事情变得更糟。 - Rick James

php.ini规范

  • php.ini文件中,您应该为您的平台指定默认字符集,例如

    default_charset = "utf-8";
    

    (这与在所有网页上执行header('Content-Type: text/html; charset=utf-8');基本相同)

文件编码的

  • .php文件本身是UTF-8编码也很重要。如果您使用Notepad ++编写代码,可以在任务栏的“格式”下拉列表中完成。您应该使用没有物料清单的UTF-8。

如果你按照上面的所有指示,你的问题很可能会得到解决。如果没有,您可以查看此StackOverflow帖子:UTF-8 all the way through