PHP - Mysql中的拉丁字符

时间:2017-09-30 17:22:49

标签: php mysql utf-8 character-encoding

我有一个相当奇怪的问题: 我正在使用一个数据库(我没有设计),这个数据库是多语言的,也就是说,有英文,西班牙文,俄文,越南文等标题。

从我所看到的带有“ñ”,“á”,“é”,“ë”等字符的标题已经以这种方式存储在数据库中:“& ntilde_”,所以我知道在html中为了显示这些字符如何编写它们是在我的PHP代码中调用这些字符时的“.wrapper { max-width: 900px; margin: 0 auto; } .wrapper>div { background-color: lightcoral; padding: 3em; color: white; /* ADDED THESE*/ display: flex; align-items: flex-end; justify-content: flex-start; } .wrapper { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 15px; grid-auto-rows: minmax(100px, auto); } .one { grid-column: 1; grid-row: 1; background-image: url('https://www.cdc.gov/nchs/images/hp2000/hdspr/hdslide11.gif'); background-position: 610px 500px; } .two { grid-column: 2; grid-row: 1 /3; background-image: url('http://www.solidbackgrounds.com/images/2560x1440/2560x1440-indigo-web-solid-color-background.jpg'); } .three { grid-column: 1; grid-row: 2 /3; background-image: url('http://www.extremetech.com/wp-content/uploads/2012/02/GreenBackground.png'); } .four { grid-column: 3; grid-row: 1 / 4; background-image: url('http://www.ledr.com/colours/grey.jpg'); } .five { grid-column: 1 /3; grid-row: 3; background-image: url('https://www.cdc.gov/nchs/images/hp2000/hdspr/hdslide11.gif'); } .six { grid-column: 1 / 4; grid-row: 4; background-image: url('http://www.solidbackgrounds.com/images/2560x1440/2560x1440-indigo-web-solid-color-background.jpg'); } .seven { grid-column: 1; background-image: url('http://www.extremetech.com/wp-content/uploads/2012/02/GreenBackground.png'); } .eight { grid-column: 1; grid-row: 8 / 5; background-image: url('https://i.ytimg.com/vi/3qlRNWBWr5o/maxresdefault.jpg'); } .nine { grid-column: 2; grid-row: 7/5; background-image: url('https://www.cdc.gov/nchs/images/hp2000/hdspr/hdslide11.gif'); } .ten { grid-column: 3; background-image: url('https://i.ytimg.com/vi/3qlRNWBWr5o/maxresdefault.jpg'); } .eleven { grid-column: 3; grid-row: 7/6; background-image: url('http://www.solidbackgrounds.com/images/2560x1440/2560x1440-indigo-web-solid-color-background.jpg'); } .twelve { grid-column: 2/4; grid-row: 7; background-image: url('http://www.extremetech.com/wp-content/uploads/2012/02/GreenBackground.png'); } .thirteen { grid-column: 1/4; grid-row: 8; background-image: url('https://i.ytimg.com/vi/3qlRNWBWr5o/maxresdefault.jpg'); } /*HOVER*/ .one:hover { opacity: .6; } .two:hover { opacity: .6; } .three:hover { opacity: .6; } .four:hover { opacity: .6; } .five:hover { opacity: .6; } .six:hover { opacity: .6; } .eight:hover { opacity: .6; } .nine:hover { opacity: .6; } .ten:hover { opacity: .6; } .eleven:hover { opacity: .6; } .twelve:hover { opacity: .6; } .thirteen:hover { opacity: .6; } @media only screen and (max-width: 768px) { .wrapper { display: block; } .margin-bot { margin-bottom: 2px; } }”(不使用任何类型的转换)以下情况发生在我身上:

<div class="wrapper">

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="one margin-bot">one</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="two margin-bot">two</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="three margin-bot">three</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="three margin-bot">four</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="four margin-bot">five</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="five margin-bot">six</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="six margin-bot">seven</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="eight margin-bot">eight</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="nine margin-bot">nine</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="ten margin-bot">ten</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="eleven margin-bot">eleven</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="twelve margin-bot">twelve</div>

  <div onclick="location.href='landing.html';" style="cursor: pointer;" class="thirteen margin-bot">thirteen</div>
</div>

我尝试使用utf_decode和html_entities_decode,但这不起作用。 我想这样做,使用str_replace从标题“Señ_ora”中删除“_”,但我得到了:“Se&amp; ntildeora”

2 个答案:

答案 0 :(得分:1)

  

“ñ”,“á”,“é”,“ë”类型的字符以这种方式存储在数据库中:“&amp; ntilde _”

这很奇怪。

首先,确保您的数据库实际上包含这些_个字符,并确保您没有看到某种替换字符被渲染。无论您使用什么程序来显示数据,都可能会错误地设置某些字符集选项。

您可以说SELECT field, HEX(field) FROM table WHERE field LIKE '%' ORDER BY CHAR_LENGTH(field) LIMIT 10找一些相对较短的例子。然后在十六进制输出上查找3B;的十六进制)和5F_的十六进制)。

例如,我的UTF8设置上的SELECT HEX('Se&ntilde;ora'), HEX('Se&ntilde_ora')给出了这两个字符串

5365266E74696C64653B6F7261
                  xx
5365266E74696C64655F6F7261

看到区别?

如果_字符肯定在您的数据中,那么您需要进行一些网络搜索。您是否可以访问设置此项的人,以便您可以询问?如果是的话,那就做。它将为您节省一些逆向工程时间。

如果您必须在没有帮助的情况下解决此问题,您可以尝试使用这样的

 $my_data = str_replace('_',';', $my_data);

这应该可以正确地格式化有权限的字符。 ,它还会将独立的_字符更改为;。要解决此问题,您需要一份包含数据中所有授权字符的列表,并且您需要单独更改这些字符。

答案 1 :(得分:0)

根据我的理解,你也可以在使用PHP代码连接/建立与mysql的连接时处理这个问题。

//确保数据是UTF *,数据库可以看到重音和内容

    $db = mysql_connect('localhost', 'user', 'pass');
    if (!$db) {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("dbname");
    mysql_query("SET NAMES 'utf8'", $db);
    mysql_query("SET CHARACTER_SET 'utf8'", $db);