2016-09-19 3 views
0

У меня есть форма, в которой я беру HTML-код из редактора TinyMCE в качестве входного файла в одном из своих текстовых полей для создания информационного бюллетеня. Я хотел бы добавить utm-коды в конце каждой ссылки. Я смоделировал шаблон RegEX и заменил его на онлайн-редактор, но сохраненный код является обычным href без utm-кодов.regex - preg_replace в моем скрипте PHP не работает

<?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(); 
?> 

Пример $ содержимого тела от TinyMCE

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

Пример $ содержимого тела после 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

Явная легкодоступная пара входных и ожидаемых результатов всегда приветствуется при задании вопросов RegEx. – revo

+0

Вы правы. Здесь: '' -> '' – Otto

+1

Ваша строка замены неполна. Это должно быть '$ replacement = 'href =" $ 1? Utm_source = newsletter & utm_medium = email & utm_campaign ='. $ Subject; ' – revo

ответ

0

Использование

mysqli_real_escape_string ($ дБ, $ _POST [ 'editor1'])

Он добавляет '\' между тегами и шаблон не соответствует. Он изменен (обратите внимание на..)

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

1

Самый простой способ это сделать замену с $0 вместо от $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; 

Выход:

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

ОП имеет проблему, которая, вероятно, отменяет любые предыдущие изменения. Я думаю, что он не работает с правой переменной, иначе его проблема должна быть решена комментариями. – revo

+0

работает, когда я помещаю что-то в $ string variable в качестве примера, но не тогда, когда $ string принимает содержимое тела $, которое я получаю из редактора TinyMCE таким образом: '$ body = mysqli_real_escape_string ($ db, $ _POST ['editor1 ']); ' $ body содержит несколько строк со всем HTML, например: '' К сожалению, у меня не было ясно. – Otto

+0

@Otto: Он работает для меня даже на всей странице html, ссылка изменяется в соответствии с запросом. Пожалуйста, отредактируйте свой вопрос с помощью полного воспроизводимого примера и того, что вы хотите в качестве вывода. – Toto

Смежные вопросы