因此,我尝试了您的代码并遇到了与您相同的问题。很有趣,对吧?问题是“激励”中的“e”和“more”之间实际上还有另一个字符,如果你这样做,你可以看到它,分成$subject
两部分,在文本之前to incentivize
和之后:
// 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 ...
,看!这是我们的神秘人物,它有 charcode 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})
但无论哪种情况,您都可能希望保持灵活性。