url中的&符号通过php explode()读取为分号

时间:2013-11-19 00:23:46

标签: php explode html-encode

我想允许我的用户在单个字段中创建网址链接和标签,例如:

  

立即注册; 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;

唯一的问题是,如果他们输入的网址包含带有&符号的查询字符串,那么&符号会被爆炸()函数视为分号,所以如果他们输入

  

立即预订; http://www.abc123.com/scripts/WebObjects.dll/AAAOnline?association=CAA&club=272

$ cta_array变量返回:

Array

(     [0] =&gt;现在预订     [1] =&gt; http://www.aaa.com/scripts/WebObjects.dll/AAAOnline?association=CAA&amp;     [2] =&gt;俱乐部= 272 )

我认为它正在改变'&amp;'到&amp;并且分号用作分隔符,但我不确定如何解决它。

2 个答案:

答案 0 :(得分:1)

我用&amp;替换了&amp;在爆炸之前

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

解决了这个问题。

答案 1 :(得分:0)

要求您的用户使用其他分隔符,例如逗号。 或者以编程方式更改分隔符。

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