2013-11-19 1 views
1

Я хочу, чтобы позволить своим пользователям создать ссылку URL-адрес и метку в одном поле, как:амперсандов в URL гласит точку с запятой с помощью PHP взорваться()

Регистр Теперь; www.abc123.com

или просто

www.abc123.com

мой код выглядит следующим образом:

$cta_array = explode(";", $field) ; 
if(count($cta_array) > 1){ 
    $cta = '<a href="'.esc_url($cta_array[1]).'" class="button '.$color.'">'.esc_html($cta_array[0]).'</a>'; 
} 
else{ 
    $cta = '<a href="'.esc_url($field).'" class="button '.$color.'">Select</a>'; 
} 
return $cta; 

Только проблема, если URL они введите строки запроса с амперсандами, амперсанды будут обрабатываться как точки с запятой функцией explode(), поэтому, если они вводят

Book Now; http://www.abc123.com/scripts/WebObjects.dll/AAAOnline?association=CAA&club=272

$ cta_array переменная возвращает это:

Array 

( [0] = > Забронировать [1] = > http://www.aaa.com/scripts/WebObjects.dll/AAAOnline?association=CAA&amp; [2] = > клуб = 272 )

Я думаю, что его преобразование '&' в &amp; и эта точка с запятой используется как del imiter, но я не уверен, как это исправить.

+1

Вы пытались заменить & на & перед взрывом? – developerwjk

+0

'explode()' не конвертирует амперсанды в свой html escape. Это уже было. Что делает ваша функция 'esc_url()'? – mario

+0

@developerwjk спасибо, что решила проблему. – drav

ответ

1

Я заменил &amp; с & перед взрывом

$cta_array = explode(';', str_replace('&amp;', '&', $cta_array[0])); 

Это фиксированный вопрос.

0

Попросите своих пользователей использовать другие разделители, такие как запятая. Или программно изменить разделитель.

$cta_array = explode(“|”, str_replace(‘;’,’|’,$field)); 
+0

Привет, просто заменяет точки с запятой в & на |. Комментарий @developerwjk выше решил проблему. – drav