【问题标题】:How do I store Latin characters in an array and successfully retrieve them as Latin letters?如何将拉丁字符存储在数组中并成功地将它们检索为拉丁字母?
【发布时间】:2018-10-09 23:44:34
【问题描述】:

我正在编写一个脚本,该脚本从 MySQL 数据库中为 $word 中的每个字母检索值。该脚本效果很好,但不适用于像 enye 这样的拉丁字符。

示例代码:

$word = "Cañones";

$letters = str_split($word);

print_r($letters);

$query = "SELECT GROUP_CONCAT(Alpha) AS Alpha,
             GROUP_CONCAT(Letter_Box_Width) AS Letter_Box_Width
      FROM Font_Krinkes
      WHERE Alpha IN ('" . implode("','", $letters) . "')";

print_r 的输出

Array
(
    [0] => C
    [1] => a
    [2] => ?
    [3] => ?
    [4] => o
    [5] => n
    [6] => e
    [7] => s
)
PHP Notice:  Undefined index: ?
PHP Notice:  Undefined index: ?

在我看来,enye 被错误地从我的 $letters 数组中存储和检索。它作为问号被检索...然后,当然,问号值的查询失败,这就是我收到未定义索引错误的原因。如何处理数组中的这个 enye 字符?

在完成 cmets 之后,我意识到我的代码存在的问题不仅仅是 mb_str_split 问题。我仍然无法正确查询数据库。

非常感谢任何帮助。

【问题讨论】:

  • 你的数据库编码和排序规则是什么?
  • UTF-8 和 utf8_bin 不确定这与数组有何关系。拉丁字符在数据库中存储良好。
  • 哦,所以它们正确地存储在数据库中。但看起来 php 将它们视为有向图。不确定str_split 是否适用于多字节,您检查过the reference 吗?
  • 你是对的! “str_split() 在处理多字节编码的字符串时将分割成字节,而不是字符。”
  • This 似乎有效,下一个也有效

标签: php mysql


【解决方案1】:

在存储从数据库中获取字符串数据并确保所有字符都能正常显示时,您需要设置连接的字符编码。只需添加这一行: mysqli_set_charset($conn,"utf8"); 其中您的$conn 是您与数据库的连接。

【讨论】:

  • 我非常希望这会起作用,但不幸的是,这也不起作用。我仍然收到相同的“PHP 通知:未定义索引:?”包含ñ时出错
猜你喜欢
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多