将HTML实体放入MySQL数据库时解码HTML实体

时间:2013-04-16 01:39:36

标签: php mysql encoding

我正在尝试正确写入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 Table行是一个VARCHAR(40),我尝试过排序规则“utf8_roman_ci”,“latin1_swedish_ci”,“utf8_swedish_ci”,“utf8_general_ci”以及其他几个,但它似乎没有太大变化。

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

2 个答案:

答案 0 :(得分:3)

您的查询失败,因为您没有逃避撇号。您可以通过使用预准备语句轻松完成此操作(无论如何您应该使用mysqli)。与此同时,$team_name_converted = mysqli_real_escape_string($con, $team_name_converted)将会这样做。

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

答案 1 :(得分: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;