stripos和str_replace如何工作?

时间:2017-05-11 13:14:52

标签: php str-replace stripos

我很难理解php函数striposstr_replace是如何工作的。

我有一组文字,例如:{% if group.newt !== "" %} XYZ's {% else %} ABC's {% endif %}

我想用Go to this link www.google.com替换该文字。

我搜索文本正文:

if(stripos($entity->getBodyOfText(), $strTFind) !== false) {preg_match("{% if group.newt !== "" %} XYZ's {% else %} ABC's {% endif %}", $strToReplace)};

OR

$str_replace($strToFind, $strToReplace, $entity->getBodyOfText());

我得到的结果是文本没有被找到或替换!我不懂为什么。有人可以帮我看清楚吗?

编辑:

文本正文是一个包含大量图像,文本和树枝代码的电子邮件模板。在一组特定的电子邮件模板中,我需要用一行文本查找并替换整个twig代码块(这与文本的内容无关)。我遇到的问题是当我使用str_replacepreg_replace搜索电子邮件模板中的代码块时,这些函数找不到或替换我想要查找和替换的块。

所以我的输出是相同的(没有找到,没有任何改变)。

例如:

    `here would be an image 

    now starts a heading,

      some more text with {{ twig.variable }} and then more text.
    more

    text, lots more text some {% twig.fucntions %}blah{% ending %} and 
then here is the block 
I want to find and replace: {% replace this whole thing including the brackets and percentage signs %}keep replacing
{% else %}
replace that else (everything including the brackets and percentage signs)and
{% this too %}.

    some more ending text.

    image,

    the end`

我希望有所帮助!

2 个答案:

答案 0 :(得分:0)

使用str_replace ...

str_replace("Pattern to search",$stringToSearch,"Replacement text");

所以在实践中:

$string = "{% if group.newt !== '' %} XYZ's {% else %} ABC's {% endif %}";

$newString = str_replace("{% if group.newt !== '' %} XYZ's {% else %} ABC's {% endif %}",$string,"Go to this link www.google.com");

echo $newString;

Fyi,你需要href那个链接才能成为一个真正的链接。同时修正你的比较中的“”以适应PHP包含“”;

在PhpFiddle.com中测试

如果您打算使用您的功能

$entity->getBodyOfText(); 

用它替换$ string,或者指定

$string = $entity->getBodyOfText();

答案 1 :(得分:0)

使用非正则表达式解决方案要求您确切知道要替换的子字符串 - 我假设您知道子字符串。需要注意的是,如果子字符串有可能出现多次,并且您只需要一次替换,那么str_replace()会因替换所有找到的子字符串而导致失败。如果子字符串在字符串中是唯一的,或者您想要替换所有重复的子字符串,那么一切都将按预期工作。

代码(Demo):

$find='{% replace this whole thing including the brackets and percentage signs %}keep replacing
{% else %}
replace that else (everything including the brackets and percentage signs)and
{% this too %}.';
$replace='LINK';

$text=str_replace($find,$replace,$text);
echo "$text";

输出:

here would be an image 

    now starts a heading,

      some more text with {{ twig.variable }} and then more text.
    more

    text, lots more text some {% twig.fucntions %}blah{% ending %} and 
then here is the block 
I want to find and replace: LINK

    some more ending text.

    image,

    the end

如果您需要更好的定制解决方案,请解释这种方法是如何失败的,我会调整它。