2013-05-21 29 views
2

带有特殊字符的内容例如' " -当被存储时被替换成像这样的字符。但并不是所有字符的实例都会更改为像这样的字符。所以它有点奇怪,为什么它只影响一些人物而不是全部。如何在mysql db中存储和获取确切的字符?

阅读一些文章在网上和SO后,我发现了table collationcharset

  • 我使用PHP MySQL的
  • 存储和获取值
  • 数据库表中的排序规则,当我使用预处理语句设置到utf8_unicode_ci
  • 我的页面是html5<meta charset="utf-8">

通过上述设置,我仍然可以得到黑色钻石。任何帮助?我有点绝望。

编辑:

也许你们中的一些将通过在未来完全相同的问题。您可能会在下面找到我的答案,完全相同的解决方案。干杯!

+0

数据库中的“字符集”和“名称”是否也设置为utf8? – Waygood

+0

@Waygood啊我没有检查过。我的主机在创建数据库时有自己的UI,并且在创建数据库时并没有让我选择'char set'。我现在去改变它,看看它是否解决了这个问题。 –

+0

数据库中的数据看起来是否正确? – andyb

回答

1

确定这篇文章是几个星期大,但我发现我在这里出错的地方。

正确设置为UTF-8的数据库中存储和获取的值。问题是当我echohtmlentities

我的老回声穿过:htmlentities($str, ENT_QUOTES);它没有 'UTF-8'

新的回波穿过:htmlentities($str, ENT_QUOTES, "UTF-8");它的工作。

呃。几个字符的伤害。

无论如何感谢所有帮助。

2

我的网页是HTML5与<meta charset="utf-8">

无论meta s为完全无用。
页面字符集仅由Content-type仅由HTTP标头确定,其中必须包含正确的字符集。

$mysqli->set_charset('utf8')/;charset=utf8也应该使用PDO的DSN,但它似乎不是你的情况的问题。

+0

我试着在我的代码上添加'set_charset(“utf8”)'',就像手册上的那样。仍然没有工作。当你在HTTP标头上说'Content-type'时。你的意思是在.htaccess上添加'AddDefaultCharset UTF-8'吗? –

+0

.htaccess也是如此。但是它可以被PHP覆盖。无论如何,你不得不问如何设置,但如何看看实际设置了哪一个。 –

+0

好,所以我发现了这个问题。使用'mb_detect_encoding($ str)'将其设置为'ASCII'。所以谢谢你的提示。但最后一个问题。我如何将该设置永久更改为“UTF-8”?将'$ str = mb_convert_encoding($ str,“UTF-8”);'永久更改字符编码还是仅用于当前页面? –

相关问题