2016-09-19 1 views
0

Ich habe ein Formular, wo ich einen HTML-Code aus einem TinyMCE-Editor als Eingabe in einem meiner Textarea, um einen Newsletter zu machen. Ich möchte utm Codes am Ende jedes Links hinzufügen. Ich habe ein Regex-Muster und einen Ersatz für den Online-Editor simuliert, aber der gespeicherte Code ist der übliche href ohne utm-Codes.regex - preg_replace in meinem PHP-Skript funktioniert nicht

<?php 
$subject=$_POST['subject']; 
$from_email=$_POST['from_email']; 
$from_name=$_POST['from_name']; 
$replyto_email=$_POST['replyto_email']; 
$replyto_name=$_POST['replyto_name']; 
$lingua=$_POST['lingua']; 
$body = mysqli_real_escape_string($db, $_POST['editor1']) ; 

$string = $body; 
$pattern = '/href="([^"]+)/'; 
$replacement = '$0?utm_source=newsletter&utm_medium=email&utm_campaign='.$subject; 
$txt = preg_replace($pattern, $replacement, $string); 

$stmt=null; 
$stmt=$db->prepare("INSERT INTO newsletter_email(subject,from_email,from_name,replyto_email,replyto_name,lingua,body) VALUES('$subject','$from_email','$from_name','$replyto_email','$replyto_name','$lingua','$txt')"); 
if (!$stmt) { 
    log_msg($db->error); 
    die(); 
} 
$stmt->execute(); 
$stmt->close(); 
$db->close(); 
?> 

Beispiel für Körper $ content von TinyMCE

$body = "<html><head></head><body><a href="example.com" target="_blank">Test</a></body></html>" 

Beispiel von $ Körpergehalt nach preg_replace

$body = "<html><head></head><body><a href="example.com?utm_source=newsletter&utm_medium=email&utm_campaign=Email Subject" target="_blank">Test</a></body></html>" 
+0

Ein explizites, leicht zu erfassendes Paar von Eingabe- und erwarteten Ausgaben ist immer willkommen, wenn Sie RegEx-Fragen stellen. – revo

+0

Sie haben Recht. Hier: '' -> '' – Otto

+1

Ihre Ersetzungszeichenfolge ist unvollständig. Es sollte "$ ersatz = 'href =" $ 1? Utm_source = newsletter & utm_medium = email & utm_campaign ='. $ Betreff; ' – revo

Antwort

0

Mit

mysqli_real_escape_string ($ db, $ _POST [ 'editor1'])

Sie fügt hinzu, '\' zwischen den Tags und das Muster stimmt nicht überein. Es ist geändert (achten Sie auf '.')

$ pattern = '/hrref=."([^"]+)/';

1

Der einfachste Weg, um den Austausch mit $0 anstatt zu tun ist, von $1:

$subject = 'Email subject'; 
$string = '<a href="example.com">'; 
$pattern = '/href="([^"]+)/'; 
$replacement = '$0?utm_source=newsletter&utm_medium=email&utm_campaign='.$subject; 
$txt = preg_replace($pattern, $replacement, $string); 

echo $txt; 

Ausgang:

<a href="example.com?utm_source=newsletter&utm_medium=email&utm_campaign=Email subject"> 
+1

OP hat ein Problem, das wahrscheinlich alle vorherigen Änderungen außer Kraft setzt.Ich denke, er arbeitet nicht mit der richtigen Variable, sonst sollte sein Problem durch Kommentare gelöst werden. – revo

+0

Es funktioniert, wenn ich etwas in $ string Variable als Beispiel setze, aber nicht wenn $ string den Inhalt des $ body übernimmt, den ich vom TinyMCE Editor auf diese Weise bekomme: '$ body = mysqli_real_escape_string ($ db, $ _POST ['editor1 ']); ' $ body enthält mehrere Zeilen mit dem gesamten HTML, Beispiel: '' Sorry, ich war nicht klar. – Otto

+0

@Otto: Es funktioniert bei mir sogar in einer ganzen HTML-Seite, der Link wird wie gewünscht geändert. Bitte bearbeiten Sie Ihre Frage mit einem vollständigen reproduzierbaren Beispiel und was Sie als Ausgabe haben möchten. – Toto