PHP:如果搜索字符串排在第一位,则字符串替换不起作用
PHP: String Replacement not working if search string is first in line
我正在从 MySQL 数据库中检索一些数据。为了突出显示,我想使用 PHP 修改显示的数据。添加了一个跨度 class,它将应用一些文本着色和字母间距。我的数据存储在 $example
.
到目前为止,这是我的 PHP 代码,$kw
是包含要替换的字符串的变量:
$kw = "Fun:"
if(strpos($example,$kw)) {
$example = str_replace($kw,"<span class='new'>Fun:</span>",$example);
}
这适用于 $example = "text text; Fun: text";
。至于像 $example = "Fun: text";
这样的东西,"Fun:" 没有按预期替换,没有应用 str_replace。完全没有任何反应。
当我尝试替换 $kw = "un:";
时,它工作正常,除了“Fun:”中的“F”现在没有突出显示。
因此,如果要替换的文本位于搜索字符串的开头,则不会发生任何事情。似乎 str_replace 开始查看字符串的第二个字符而不是开头。我不知道为什么。
我检查了存储查询结果的数组,但没有发现可以帮助我解决这个问题的提示。对于这两种情况,我还打印了 strpos 的结果。对于第一个示例,我得到一个整数 > 0,对于第二个示例,结果为 0。这似乎没问题,因为在示例 1 $kw
中,它位于其他文本之间,而在示例 2 中,它位于行首。
有没有人遇到过这个问题,还是我太盲目了,看不到这里的解决方案?
函数 strpos return 元素的位置。
如果元素有第一个位置,则为 return 0(零)。
但是 if 语句将零表示为假。这就是为什么它不起作用。
只需更改您的 if 语句,如下所示:
//old
if(strpos($example,$kw)) {
//new
if (strpos($example,$kw) !== false) {
在文档中阅读有关 strpos 的更多信息
https://www.php.net/manual/ru/function.strpos.php
顺便读一下这个
Null vs. False vs. 0 in PHP
我正在从 MySQL 数据库中检索一些数据。为了突出显示,我想使用 PHP 修改显示的数据。添加了一个跨度 class,它将应用一些文本着色和字母间距。我的数据存储在 $example
.
到目前为止,这是我的 PHP 代码,$kw
是包含要替换的字符串的变量:
$kw = "Fun:"
if(strpos($example,$kw)) {
$example = str_replace($kw,"<span class='new'>Fun:</span>",$example);
}
这适用于 $example = "text text; Fun: text";
。至于像 $example = "Fun: text";
这样的东西,"Fun:" 没有按预期替换,没有应用 str_replace。完全没有任何反应。
当我尝试替换 $kw = "un:";
时,它工作正常,除了“Fun:”中的“F”现在没有突出显示。
因此,如果要替换的文本位于搜索字符串的开头,则不会发生任何事情。似乎 str_replace 开始查看字符串的第二个字符而不是开头。我不知道为什么。
我检查了存储查询结果的数组,但没有发现可以帮助我解决这个问题的提示。对于这两种情况,我还打印了 strpos 的结果。对于第一个示例,我得到一个整数 > 0,对于第二个示例,结果为 0。这似乎没问题,因为在示例 1 $kw
中,它位于其他文本之间,而在示例 2 中,它位于行首。
有没有人遇到过这个问题,还是我太盲目了,看不到这里的解决方案?
函数 strpos return 元素的位置。
如果元素有第一个位置,则为 return 0(零)。
但是 if 语句将零表示为假。这就是为什么它不起作用。
只需更改您的 if 语句,如下所示:
//old
if(strpos($example,$kw)) {
//new
if (strpos($example,$kw) !== false) {
在文档中阅读有关 strpos 的更多信息
https://www.php.net/manual/ru/function.strpos.php
顺便读一下这个
Null vs. False vs. 0 in PHP