2017-05-11 4 views
-1

Ich habe Schwierigkeiten zu verstehen, wie die PHP-Funktionen stripos und str_replace funktionieren.Wie funktionieren stripos und str_replace?

Ich habe einen Körper von Text wie: {% if group.newt !== "" %} XYZ's {% else %} ABC's {% endif %}

und bin zu wollen, dass Text mit Go to this link www.google.com zu ersetzen.

ich durch den Körper von Text zu suchen:

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

ODER

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

Die Ergebnisse erhalte ich bin, dass der Text nicht oder ersetzt gefunden wird! Ich verstehe nicht warum. Könnte jemand bitte das für mich beleuchten?

EDIT:

Der Körper des Textes ist eine E-Mail-Vorlage mit vielen Bildern, Text und Zweig-Code. In einer bestimmten Reihe von E-Mail-Vorlagen muss ich einen ganzen Block Zweigcode mit einer Textzeile finden und ersetzen (es spielt keine Rolle, was dieser Text ist). Das Problem, das ich habe, ist, wenn ich nach dem Block des Codes in den E-Mail-Vorlagen unter Verwendung str_replace oder preg_replace suche, diese Funktionen nicht finden oder den Block ersetzen, den ich suche und ersetze.

Also meine Ausgabe ist die gleiche (nichts wird gefunden, nichts wird geändert).

Zum Beispiel:

`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` 

Ich hoffe, das hilft!

+0

Was ist ein kleines Beispiel für den vollständigen String, in dem sich der Teilstring '{% ...% }' befindet? – mickmackusa

+0

es ist Zweig Code ... "{% if Anweisungen! ==" "%} Dies sollte zeigen {% else%} eine andere Sache zeigt {% endif%}". – grgre

+0

Ich bin nicht mit Zweig-Code vertraut. Wenn ich versuche, anderen Benutzern mit str/preg zu helfen, Typfragen zu ersetzen, sehe ich gerne eine klare Erklärung dafür, was die gesamte Eingabe ist, was sie als Teilzeichenfolge ansteuert und was an ihrer Stelle steht. Ich sehe, dass Sie die Verbindungszeichenfolge eingeben möchten, aber der Rest ist unklar. Bitte zeigen Sie alle Vor- und Nachtexte an, damit Ihre Frage kristallklar ist. Gibt es mehr Text außerhalb des Zweigausdrucks? – mickmackusa

Antwort

0

Verwenden str_replace ...

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

So in der Praxis:

$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, müssen Sie den Link auf href für es aber eine tatsächliche Verbindung sein. Außerdem wurde Ihr "" in Ihrem Vergleich so angepasst, dass PHP "umhängt" mit "";

in PhpFiddle.com Getestet

Wenn Sie Ihre Funktion

$entity->getBodyOfText(); 

verwenden möchten $ string mit, dass ersetzen, OR zuweisen

$string = $entity->getBodyOfText(); 
0

eine nicht-regex-Lösung erfordert, dass Sie wissen genau, welche Teilzeichenfolge Sie ersetzen möchten - ich nehme an, Sie kennen die Teilzeichenfolge. Ein Wort der Warnung, wenn die Chance besteht, dass der Teilstring mehr als einmal vorkommt und Sie nur einen Ersatz haben wollen, dann wird str_replace() Ihnen durch das Ersetzen aller gefundenen Teilstrings fehlschlagen. Wenn die Teilzeichenfolge in der Zeichenfolge eindeutig ist oder wenn Sie alle doppelten Teilzeichenfolgen ersetzen möchten, funktioniert alles wie gewünscht.

-Code (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"; 

Ausgang:

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 

Wenn Sie eine bessere maßgeschneiderte Lösung benötigen, bitte erklären, wie diese Methode Sie versagt und ich werde es ändern.

+0

@grgre Bitte geben Sie mir ein Feedback über meine beiden Versuche. Wenn ich immer noch falsch liege, bitte versuchen Sie es erneut, um mir Ihre Frage zu erklären. Wenn meine Muster nicht all Ihre möglichen Zweigcodesyntaxen ausreichend berücksichtigen, stellen Sie bitte ein zusätzliches Eingabeprobe zur Verfügung, mit dem ich testen kann. Wenn Sie nach einer dieser Methoden suchen, lassen Sie mich wissen, welche Sie verwenden möchten, damit ich die andere löschen kann. – mickmackusa

+0

Bitte überprüfen Sie meine Bearbeitung, ich hoffe, dass Sie damit besser verstehen können. Deine Antworten werden jetzt nicht für mich funktionieren. – grgre

+0

@grge Ich aktualisierte meine Antwort. Wenn das nicht hilft, lassen Sie mich bitte einen Kommentar. – mickmackusa