Допустим, у меня есть этот preg replace:
$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href=$1">$1</a>', $emailnote);
Он заменяет текстовые URL на кликабельные ссылки, но в нужном мне формате, потому что мне нужно обработать этот клик определенным образом, прежде чем перенаправить его на ихконечное назначение.В любом случае, вы видите два знака доллара 1 (1 доллар)?Я хочу заменить символы для первого, но не для второго, а также я хочу заменить символы только для текста после href =, а не для всей строки / переменной $ emailnote.мне нужно преобразовать любые амперсанды в HTML для амперсанда (&), но только для значения параметра href.не амперсанд прямо перед href = и нигде в emailnote.
Например, примечание может иметь следующее:
http://example.com/folder/?something&ok blah blah blah & blah
Когда форма отправляется с этим текстом в текстовом поле, и яиди, чтобы обработать это.У меня есть база данных, сохраняющая ее в точности как есть, а затем я также отправляю ее по электронной почте, и мне нужно только преобразовать ее для электронной почты.Мне нужно письмо, чтобы отобразить его так:
<a href="http://example2.com/index/goto.php?file_id=123&href=http://example.com/folder/?something&ok">http://example.com/folder/?something&ok</a> blah blah blah & blah
Вещи, которые я пробовал, которые не работают ...
Вещь 1:
$emailnote = str_replace('&','&', preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href=$1">$1</a>', $emailnote));
Вещь 2:
function ampReplace($str) {
$str = str_replace('&', '&', $str);
return $str;
}
//only 1 of these at a time, not all at once...
//$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.ampReplace($1).'">$1</a>', $emailnote);
//$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.ampReplace('$1').'">$1</a>', $emailnote);
$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.ampReplace("$1").'">$1</a>', $emailnote);
Спасибо за любую помощь.
РЕДАКТИРОВАТЬ
не обращайте внимания на URL, кодирующее все значение параметра href, а не просто конвертирующееамперсанд, но как мне это сделать?
например, вывод будет таким, но, как я уже сказал, я не знаю, как этого добиться:
<a href="http://example2.com/index/goto.php?file_id=123&href=http%3A%2F%2Fexample.com%2Ffolder%2F%3Fsomething%26ok">http://example.com/folder/?something&ok</a> blah blah blah & blah
РЕДАКТИРОВАТЬ
Следующие вещи, которые я пробовал, не работали.
//$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.urlencode('\\1').'">$1</a>', $emailnote);
//$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.urlencode('\$1').'">$1</a>', $emailnote);
//$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.urlencode('$1').'">$1</a>', $emailnote);
//$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.urlencode("$1").'">$1</a>', $emailnote);
//$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.urlencode('\\$1').'">$1</a>', $emailnote);
$emailnote = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="'.SITE_DOMAIN.'index/goto.php?file_id='.$id.'&href='.urlencode("\\$1").'">$1</a>', $emailnote);