-- 系统是 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'';
$string = preg_replace('/�+([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/