2

我正在尝试正确写入 MySQL 数据库,但它给了我 HTML 实体而不是我想要的字符。

我的页眉包含...

<meta charset="utf-8">

这是我正在使用的代码...

$team_name = "Ranieri&#39;s Ghost";
$team_name_converted = html_entity_decode($team_name, ENT_COMPAT, "UTF-8");

mysqli_query($con,"INSERT INTO mydbname (team_name) VALUES ('$team_name_converted') ");

echo $team_name_converted;
  • 回显到屏幕:Ranieri's Ghost
  • MySQL数据库中的条目:Ranieri&#39;s Ghost

我知道这很容易受到 SQL 注入的影响,但我会在修复后对其进行排序。

SQL 表行是一个 VARCHAR (40),我尝试了排序规则“utf8_roman_ci”、“latin1_swedish_ci”、“utf8_swedish_ci”、“utf8_general_ci”和其他一些,但它似乎没有太大变化。

知道如何让它在Ranieri's Ghost没有特殊字符的情况下写入我的 MySQL 数据库吗?

4

2 回答 2

3

您的查询失败,因为您没有转义撇号。您可以通过使用准备好的语句轻松完成此操作(无论如何您都应该使用 mysqli)。在此期间,$team_name_converted = mysqli_real_escape_string($con, $team_name_converted)会做。

编辑:ENT_COMPAT转换双引号但不转换单引号。使用ENT_QUOTES.

于 2013-04-16T01:41:56.037 回答
1

改为这样做:

$team_name = "Ranieri&#39;s Ghost";
$team_name_converted = html_entity_decode($team_name, ENT_COMPAT, "UTF-8");

$val = mysqli_real_escape_string($con, $team_name_converted);
mysqli_query($con,"INSERT INTO mydbname (team_name) VALUES ('$team_name_converted') ");

echo $team_name_converted;
于 2013-04-16T01:43:41.377 回答