str_replace() 不适用于以下情况
str_replace() not working for the following case
我想使用 str_replace()
在 html 字符串周围放置 span 元素以突出显示它们。
然而,当字符串中有
时,以下内容不起作用。我试过用 ' '
替换
但这没有帮助。
实例
您可以使用以下代码重现问题:
$str_to_replace = "as a way to incentivize more purchases.";
$replacement = "<span class='highlighter'>as a way to incentivize more purchases.</span>";
$subject = file_get_contents("http://venturebeat.com/2015/11/10/sources-classpass-raises-30-million-from-google-ventures-and-others/");
$output = str_replace($str_to_replace,$replacement,$subject);
.highlighter{
background-collor: yellow;
}
所以我尝试了你的代码并 运行 解决了你遇到的同样问题。有趣,对吧?问题是在"incentivize"中的"e"和“more”之间其实还有一个字符,这样做可以看到,将$subject
分成两部分,在文本[之前=13=] 及之后:
// splits the webpage into two parts
$x = explode('to incentivize', $subject);
// print the char code for the first character of the second string
// (the character right after the second e in incentivize) and also
// print the rest of the webpage following this mystery character
exit("keycode of invisible character: " . ord($x[1]) . " " . $x[1]);
输出:keycode of invisible character: 194 Â more ...
,看!这是我们的神秘角色,它的字符码是 194!
也许这个网站嵌入了这些字符,使您很难准确地完成您正在做的事情,或者这只是一个错误。在任何情况下,您都可以使用 preg_replace
而不是 str_replace
并像这样更改 $str_to_replace
:
$str_to_replace = "/as a way to incentivize(.*?)more purchases/";
$replacement = "<span class='highlighter'>as a way to incentivize more purchases.</span>";
$subject = file_get_contents("http://venturebeat.com/2015/11/10/sources-classpass-raises-30-million-from-google-ventures-and-others/");
$output = preg_replace($str_to_replace,$replacement,$subject);
现在这就是你想要的。 (.*?)
处理神秘的隐藏字符。您可以进一步缩小此正则表达式,或者至少将其限制在最大字符数 ([.]{0,5})
,但无论哪种情况,您都可能希望保持灵活性。
你可以用这个更简单的方法来做到这一点:
$subject = str_replace("\xc2\xa0", " ", $subject);
这将用标准 space 替换所有
个字符。
您现在可以继续您的代码,但将所有
替换为常规
space
我想使用 str_replace()
在 html 字符串周围放置 span 元素以突出显示它们。
然而,当字符串中有
时,以下内容不起作用。我试过用 ' '
替换
但这没有帮助。
实例
您可以使用以下代码重现问题:
$str_to_replace = "as a way to incentivize more purchases.";
$replacement = "<span class='highlighter'>as a way to incentivize more purchases.</span>";
$subject = file_get_contents("http://venturebeat.com/2015/11/10/sources-classpass-raises-30-million-from-google-ventures-and-others/");
$output = str_replace($str_to_replace,$replacement,$subject);
.highlighter{
background-collor: yellow;
}
所以我尝试了你的代码并 运行 解决了你遇到的同样问题。有趣,对吧?问题是在"incentivize"中的"e"和“more”之间其实还有一个字符,这样做可以看到,将$subject
分成两部分,在文本[之前=13=] 及之后:
// splits the webpage into two parts
$x = explode('to incentivize', $subject);
// print the char code for the first character of the second string
// (the character right after the second e in incentivize) and also
// print the rest of the webpage following this mystery character
exit("keycode of invisible character: " . ord($x[1]) . " " . $x[1]);
输出:keycode of invisible character: 194 Â more ...
,看!这是我们的神秘角色,它的字符码是 194!
也许这个网站嵌入了这些字符,使您很难准确地完成您正在做的事情,或者这只是一个错误。在任何情况下,您都可以使用 preg_replace
而不是 str_replace
并像这样更改 $str_to_replace
:
$str_to_replace = "/as a way to incentivize(.*?)more purchases/";
$replacement = "<span class='highlighter'>as a way to incentivize more purchases.</span>";
$subject = file_get_contents("http://venturebeat.com/2015/11/10/sources-classpass-raises-30-million-from-google-ventures-and-others/");
$output = preg_replace($str_to_replace,$replacement,$subject);
现在这就是你想要的。 (.*?)
处理神秘的隐藏字符。您可以进一步缩小此正则表达式,或者至少将其限制在最大字符数 ([.]{0,5})
,但无论哪种情况,您都可能希望保持灵活性。
你可以用这个更简单的方法来做到这一点:
$subject = str_replace("\xc2\xa0", " ", $subject);
这将用标准 space 替换所有
个字符。
您现在可以继续您的代码,但将所有
替换为常规 space