我制作了一个php工具,可以在mysql数据库中进行搜索和替换。一个挑战是,我的搜索词可能在单个数据库字段中出现多次。因此,为确保替换正确的术语,请抓住它的上下文($ search)。然后,我使用str_replace()($ replace)替换该字符串中的相关术语。接下来,我在原始数据库字段上再次使用str_replace,在其中搜索$ search并替换为$ replace,然后将整个字段写回数据库。这是我的ajax文件的样子:
include 'classes/index.php';
$q = new db;
extract($_POST);
$selected = $q->select_where($table, "id = {$id}", 'id');
$original_text = $selected[0][$col];
$changed_text = str_ireplace($search,$replace,$original_text);
$updated = $q->update_row($table, array($col), array($changed_text), $id);
if ($updated) {
echo "Updated '...".$search."...' to '...".$replace."...'";
} else {
echo "<div>Original Text<br /> {$original_text}</div>";
echo "<div>Changed text<br />{$changed_text}</div>";
echo "<div>Search<br />{$search}</div>";
echo "<div>replace<br />{$replace}</div>";
}
这一切都很好用,除非字符串中有单引号或双引号(它们可以成对或单引号)。我尝试了许多不同的方法,但是没有任何效果。包括:将add_slashes()替换到所有字段。另外,我尝试使用htmlentities()转换字段,这确实可行。但是,html实体并不总是显示为引号。我对如何在应用程序的其他部分中呈现任何控制。我宁愿用数据库中已有的内容代替引号。我主要想知道我的整个方法是否有缺陷,是否有更好的做事方法。谢谢。