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

标签 php mysql codeigniter invision-power-board

-- 系统是 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 个用户,由于我们网站中的这个错误,目前无法登录。

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

最佳答案

您可以使用 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

关于php - 数据库包含#39 而不是#039,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977716/

相关文章:

php - 如何在我的元素中绘制饼图

mysql - 找到第二列值时根据列值排除行

PHP/MySQL If FROM 语句

php - CodeIgniter activerecord,检索最后一个插入ID?

php - 无法从表达式引擎连接到架构

php - 此 SetExpressCheckout 定期付款请求有什么问题吗?

php - 是否有任何 PHP 框架(例如 CodeIgniter)支持基于每个用户帐户的数据库连接以用于 Multi-Tenancy 数据库?

codeigniter - 从数据库下载文件或在 codeigniter 中保存文件夹

php - MySqli 查询执行时返回 PHP 错误 500

php - 如何在调整窗口大小时调整 YouTube 播放器的大小