1

-- 系统是 MySQL、PHP、Apache 并且代码是围绕 Codeigniter 框架构建的

编辑清楚:我不存储数据,我正在尝试检索几年前存储的数据(严重的是作为转义数据)。在数据库中,名称 Fred' 存储为 Fred' 但是当我使用 htmlspecialcahrs 转换 Fred' 时,它会显示为 Fred'。我的问题是我需要做什么才能让 Fred' 转换为 Fred' 和任何其他等价物?

原始问题

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

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

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

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

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

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

4

1 回答 1

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
于 2012-10-19T16:15:27.027 回答