【问题标题】:UTF-8 and German characters?UTF-8 和德语字符?
【发布时间】:2013-05-22 12:04:35
【问题描述】:

我的网站上的德语字符有问题,

在网站的 html/php 部分,我有这段代码来设置 utf-8:

<meta charset="utf-8">

在 mysql 中,我有这段代码来设置 utf-8

SET CHARSET 'utf8';
  1. 这里有一些德语单词:Gemäß

  2. 这是这个词在 mysql 表中的样子:

    Gem&amp;Atilde;&amp;curren;&amp;Atilde;Ÿ

  3. 该词在网站上的显示方式如下:Gemäß

有什么问题?谢谢。

【问题讨论】:

  • 您是如何将其放入数据库的?如果您在声称您正在发送 utf-8 之后只是输入 latin-1 字节,那么设置字符集将无济于事。
  • @Wooble 说了什么。您必须确保要插入的字符串采用相同的编码。仅仅因为站点的元标记说 UTF-8 并不意味着您的代码中的字符串也将是 UTF-8(尽管我一直认为 UTF-8 是默认编码......我看到我可能正在做某事这里和那里也错了)。
  • @Wooble 在我的 connection.php 中是这个代码:mysql_set_charset('utf8');我插入这样的数据:mysql_query("INSERT INTO slike(title,string,material,price,dimensions,lang,currency) VALUES('$title','$code','$material','$price',' $dimensions','$lang','$price')") 或 die(mysql_error());
  • UTF-8 all the way through 的可能重复项
  • 你在数据库中仍然有错误的编码,你还是应该修复它。

标签: php html mysql utf-8


【解决方案1】:

我正在使用此代码来获取标题:

$title = mysql_real_escape_string(htmlentities($_POST['title']));

我只是将其覆盖为

$title = $_POST['title'];

【讨论】:

  • 不推荐使用 mysql_* 并且 mysql_real_escape_string 不会保证您的数据库安全。仅供参考。
  • 现在你确实有一个错误,而第一条语句只是打乱了你的输出,你现在让它变得危险了。始终为适当的输出转义您的数据,并且仅针对此输出。要在 HTML 页面上显示数据,您应该使用 htmlspecialchars(),在 SQL 语句中插入字符串使用 mysqli_real_escape_string() 或参数化查询。
  • @Jonast92 mysql_real_escape_string 完全足以防止 SQL 注入如果应用得当。问题是很多人没有正确应用它。
  • 当然它可能会有所帮助,但仅应用它不会有太大作用,例如它不会保护您免受逻辑 sql 注入的影响。您也可以跳过它,但如果同时使用所有其他保护措施,应用它并没有什么坏处。
  • @Jonast92 现在说什么?我希望你在这里澄清你的观点:stackoverflow.com/q/12703420/476
【解决方案2】:

首先,确保您的数据库中有 UTF-8 字符。

然后,在连接 MySQL 后尝试使用SET NAMES 'UTF8'

$con=mysqli_connect("host", "user", "pw", "db");   
if (!$con)
{
    die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}

mysqli_query($con, "SET NAMES 'UTF8'") or die("ERROR: ". mysqli_error($con));

正如manual 所说:

SET NAMES 表示客户端将使用什么字符集发送 SQL 对服务器的语句...它还指定服务器应该使用的字符集 用于将结果发送回客户端。

【讨论】:

    【解决方案3】:

    试试SET NAMES 'utf8'SET NAMES 'utf-8'。其中一些适用于葡萄牙语,可能也适用于德语。我只是不记得哪个是正确的,但如果不是,就会产生错误。

    【讨论】:

      【解决方案4】:

      您应该确保 CONNECTION 也是 utf-8。

      使用 mysqli 可以通过以下方式完成:

      $connection = mysqli_connect($host, $user, $pass, $db_name);
      $connection->set_charset("utf8");
      

      现在,如果您以某种方式最终在数据库中输入了错误的字符,那么有一种方法可以使其正确:

      1. 在 PHP 脚本中,像现在一样检索信息,即不设置连接。这样,错误将被反转和纠正,并且在您的 php 文件中,您将拥有正确的 utf-8 格式的字符。
      2. 在 PHP 脚本中,通过将连接设置为 utf-8 写回信息
      3. 此时您应该会在数据库中看到正确的字符
      4. 现在将您网站的所有读/写功能更改为从现在开始使用 utf-8

      【讨论】:

        【解决方案5】:

        在 HTML5 中使用

        <meta charset="utf-8">
        

        在 HTML 4.0.1 中使用

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

        【讨论】:

          【解决方案6】:

          结果是 html 实体编码的,就好像它们是由 htmlentities() 处理的一样,我想知道您的变量是从表单接收到的,还是正在被所见即所得的编辑器处理?

          无论如何,这些应该可以在 html 模板上打印,但 html_entity_decode() 应该可以。

          希望对你有帮助

          【讨论】:

            【解决方案7】:

            将数据库中的数据类型也设置为使用 UTF-8,这应该可以解决问题。

            【讨论】:

              【解决方案8】:

              我遇到了同样的问题。我通过使用解决了:

              如果您已经创建了表格,则需要将字符集修改为:

              alter table <table name> convert to character set utf8 collate utf8_general_ci.
              

              MySQL 默认将您的表字符集设置为 latin_swedish

              此外,您在检索数据并将其显示给您的页面时可能会遇到一些问题。其中包括:mysql_set_charset('utf8'),就在您连接数据库的行下方。 例如:

              mysql_connect('localhost','root','');
              mysql_select_db('my db');
              mysql_set_charset('utf8');
              

              【讨论】:

                【解决方案9】:

                您需要为php 5.x 执行此操作

                $yourNiceLookingString = 
                htmlspecialchars ($YourStringFromDB, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');
                

                对于php 4.x

                  $yourNiceLookingString = htmlspecialchars($YourStringFromDB);
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-03-25
                  • 2019-09-27
                  • 2015-10-12
                  • 1970-01-01
                  • 2013-12-12
                  • 2013-11-12
                  • 2018-03-02
                  • 1970-01-01
                  相关资源
                  最近更新 更多