我有以下
$html = <div>ياں ان کي پرائيويٹ ليمٹڈ کمپنياں ہيں</div>
但它存储在mysql数据库中,格式如下
تو يہ اسمب
لي ميں غر
يب کو آنے
نہيں
实际上,当我从mysql数据库中检索数据并在网页上显示它时,它显示正确。 但我想知道它是存储在数据库中的unicode的标准格式,还是unicode数据应该按原样存储(ياںانکيپرائيويٹليمٹڈکمپنياںںيں)
答案 0 :(得分:2)
在数据库中存储unicode时......
首先,您的数据库必须设置为'utf-general',这不是默认值。使用MySQL,您必须将表格设置为utf格式,将各个列设置为utf。除此之外,您必须确保您的连接是utf-8连接,但这样做会根据您将unicode文本存储到数据库中的方法而有所不同。
要设置连接的字符集,如果您使用的是Mysqli,则可以这样做:
$c->set_charset('utf8'); where $c is a Mysqli connection.
但是,你必须改变你之前说过的数据库字符集。
编辑:老实说,我认为你的存储方式并不重要,尽管我将它存储为实际的unicode字符,因为如果某些用户输入'&amp; #1610;”在数据库中,它不会被错误地检索为unicode字符。
编辑:这是一个很好的例子,如果你删除&amp;之间的空格和#1610;在我的回答中,它将被错误地从服务器中检测为unicode字符,除非您希望用户能够使用类似的代码创建unicode字符。
不是一个完美的例子,因为stackoverflow是故意这样做的,它实际上并不像那样,但概念是一样的。
答案 1 :(得分:1)
数据字符集有问题。我不知道到底是什么。 这是解决方法。在插入/更新之前执行此操作:
$str = html_entity_decode($str, ENT_COMPAT, 'UTF-8');
答案 2 :(得分:0)
对我来说,这是HTML编码,PHP编码unicode的方式,以确保它在网页上显示OK,无论页面编码。
您是否尝试使用MySQL Workbench获取相同的数据?
答案 3 :(得分:0)
似乎PHP代码htmlentities
中的某个地方正在文本上使用 - 而不是htmlspecialchars
。与htmlentities
的区别在于它以您在那里看到的形式转义了许多非ASCII字符。然后,结果存储在数据库中。这不是MySQL的做法。
从理论上讲,这不是必要的。如果正确设置页面的字符集,则可以输出普通字符。例如,使用UTF-8,使用header('Content-Type: text/html; charset=utf-8');
或<meta http-equiv="Content-Type" value="text/html; charset=utf-8">
。
如果您直接查看数据库 (虽然它会在网页上显示正常),这可能会导致乱码(mojibake),除非您还确保数据库的字符集设置正确。这意味着表列,表,数据库和连接字符集可能都是utf8mb4_general_bin
或utf8_general_bin
(或..._general_ci
)。在实践中,让它全部工作可能有点令人讨厌。如果您没有编写此代码,那么代码库中的某个人可能会在某个时候决定使用htmlentities
将奇异字符转换为ASCII HTML实体,以使存储更容易。或者,当merer htmlentities
没问题时,人们有时会习惯htmlspecialchars
。