数据库包含#39而不是#039

时间:2012-10-19 15:38:03

标签: php mysql codeigniter invision-power-board

- Sytem是MySQL,PHP,Apache,代码是围绕Codeigniter框架构建的

编辑清晰度:我没有存储数据,我正在尝试检索几年前存储的数据(糟糕的是作为转义数据)。在数据库中,名称Fred'存储为Fred&#39但是当我使用htmlspecialcahrs转换Fred'时它就像Fred&#039。我的问题是我需要做些什么才能让Fred'转换成Fred&#39和其他任何等价物?

原始问题

我从另一个系统(确切地说是Invision Power Board)继承了一个数据库。该站点现在使用Codeigniter进行自定义编码,但使用的是旧的Invision Power Board站点中的相同成员数据库。

我现在发现了一个问题,即如果用户的名字中有撇号,例如“Fred'”codeigniter内置的html_escape函数(仅使用htmlspecialchars)将其转换为Fred&#039

然而,在数据库中,名称保存为:Fred&#39,因此查找失败。

我不确定Invision Power Board在将其插入数据库之前对字符串做了什么,但有没有人知道如何确保将其转换为#39而不是&#039?

简单地说,执行str_replace或更改数据库中的数据是没有用的,因为用户名中可能存在数百种可能性。快速搜索名称中带有#的用户(可能是特殊字符)会显示440个用户,由于我们网站中的此错误,他们目前无法登录。

编辑:修正了一些格式删除“;”所以它不只是显示撇号

1 个答案:

答案 0 :(得分:0)

你可以使用preg_replace()在比较之前从php生成的字符串中删除0:

$string = 'Fred&#039';

$string = preg_replace('/&#0+([1-9]+)/', '&#$1', $string);

var_dump(str_split($string));
// str_split to show real result