2

我有以下

$html = <div>ياں ان کي پرائيويٹ ليمٹڈ کمپنياں ہيں</div> 

但它被存储在mysql数据库中,格式如下

&#1578;&#1608; &#1610;&#1729; &#1575;&#1587;&#1605;&#1576;
&#1604;&#1610; &#1605;&#1610;&#1722; &#1594;&#1585;
&#1610;&#1576; &#1705;&#1608; &#1570;&#1606;&#1746; 
&#1606;&#1729;&#1610;&#1722;

实际上,当我从 mysql 数据库中检索数据并将其显示在网页上时,它会正确显示。但我想知道是unicode的标准格式存储在数据库中,还是unicode数据应该按原样存储

4

4 回答 4

2

当您将 unicode 存储在数据库中时...

首先,您的数据库必须设置为“utf-general”,这不是默认设置。使用 MySQL,您必须将表设置为 utf 格式,并将各个列设置为 utf。除此之外,您必须确保您的连接是 utf-8 连接,但这样做会因您使用何种方法将 unicode 文本存储到数据库中而有所不同。

要设置连接的字符集,如果您使用的是 Mysqli,您可以这样做:

$c->set_charset('utf8'); where $c is a Mysqli connection.

不过,您必须像我之前所说的那样更改数据库字符集。

编辑:老实说,我认为你如何存储它并不重要,尽管我将它存储为实际的 unicode 字符,因为如果某些用户输入 '& #1610;' 到数据库中,它不会被错误地检索为 unicode 字符。

编辑:这是一个很好的例子,如果你删除 & 和 #1610; 之间的空格。在我的回答中,它将被错误地从服务器检索为 unicode 字符,除非您希望用户能够使用这样的代码创建 unicode 字符。

这不是一个完美的例子,因为 stackoverflow 是故意这样做的,它实际上并没有那样工作,但概念是一样的。

于 2013-03-31T06:20:39.773 回答
1

数据字符集有问题。我不知道具体是什么。这是解决方法。在插入/更新之前执行此操作:

$str = html_entity_decode($str, ENT_COMPAT, 'UTF-8');
于 2013-03-31T06:20:23.133 回答
0

似乎您的 PHP 代码中的某处htmlentities被用于文本 - 而不是htmlspecialchars. 不同之htmlentities处在于它以您在此处看到的形式转义了许多非 ASCII 字符。然后将结果存储在数据库中。这不是 MySQL 做的。

理论上这不应该是必要的。如果正确设置了页面的字符集,应该可以输出纯字符。假设 UTF-8,例如,使用header('Content-Type: text/html; charset=utf-8');or <meta http-equiv="Content-Type" value="text/html; charset=utf-8">

如果您直接查看数据库(尽管它会在网页上正常显示) ,这可能会导致乱码(mojibake ) ,除非您还确保数据库的字符集设置正确。这意味着表列、表、数据库和连接字符集全部为、可能或(或)。在实践中,让它全部工作可能有点麻烦。如果您没有编写此代码,那么您的代码库中的某个人可能决定在某个时候使用它来将外来字符转换为 ASCII HTML 实体,以使存储更容易。或者有时人们会出于习惯而使用更多的东西。utf8mb4_general_binutf8_general_bin..._general_cihtmlentitieshtmlentitieshtmlspecialchars

于 2013-03-31T07:03:40.450 回答
0

在我看来,这是 HTML 编码,PHP 编码 unicode 的方式,以确保无论页面编码如何,它都会在网页上显示 OK。

您是否尝试使用 MySQL Workbench 获取相同的数据?

于 2013-03-31T06:19:15.363 回答