【发布时间】:2020-12-31 21:33:18
【问题描述】:
我正在尝试在生成的循环之外打印preg_replace 结果。
这是我的代码
$search = "Lola and Chris";
$query_gdpr_names = "select name FROM gdpr_names";
$result_gdpr_names = mysqli_query($connect, $query_gdpr_names);
while ($row_gdpr_names = mysqli_fetch_assoc($result_gdpr_names)) {
$name = $row_gdpr_names['name'];
$regex = "/\b" . $name . "\b/ui";
$search = preg_replace($regex, 'removed', $search);
}
echo $search;
如果我尝试在循环内打印$search,它将按预期打印每次迭代。但是如果我尝试在循环之外打印它,它就会变成空的。
如果我尝试改用 str_replace,它会在外面正确打印
$search = str_replace($name, 'removed', $search);
任何想法我对 preg_replace 做错了什么?
【问题讨论】:
-
不确定是不是问题,但是如果名称中包含某些字符可能会导致问题,您可能希望在使用前对其进行转义 - stackoverflow.com/questions/1531456/…
-
严格来说,您应该永远从该循环中获得一个空的
$search字符串,因为它会用文本removed替换匹配项。你应该检查你的结果集。例如,如果它将字母表中的每个字母都作为名称条目,那么您的替换逻辑将删除所有字母。您应该在调试模式下单步执行循环并检查。 -
无法重现(使用标准 ASCII 名称)~3v4l.org/i1VO7
-
我怀疑您的实际代码在您的一个变量名中的某处有错字。确保您可以看到任何和所有错误。 How can I get useful error messages in PHP?
-
@NigelRen,你是绝对正确的......数据库中有一条记录包含一个斜线。谢谢!
标签: php mysql while-loop preg-replace