2013-07-25 160 views
2

我的问题是,我使用特殊字符&作为重点,这似乎不工作PHP:特殊字符作为数组键

我的数组是这样

$legalforms = array(
    'GmbH & Co.KG' => array(
      'namesToSubmit' =>array(
       'companyName'=>'required', 
       'location'=>'required', 
       'phone'=>null, 
       'fax'=>null, 
       'web'=>null, 
       'registryCourt'=>'required', 
       'registryNumber'=>'required', 
       'companyNameAssociate'=>'required', 
       'locationAssociate'=>'required', 
       'registryCourtAssociate'=>'required', 
       'registryNumberAssociate'=>'requuired', 
       'ceo'=>'required' 
      ), 
     ) 
) 

当我想使用namesToSubmit我得到一个错误,该属性nameToSubmit为空,如果我删除特殊字符&在它之外,它的工作..所以我怎么能得到它与&

编辑:

$("#sendLegalForm").click(function() { 
     selection = $('#selection').val(); 
     $.ajax({ 
      type:'GET', 
      url:'http://192.168.10.24/php/sig.php?selectedLegalform='+ selection, 
      dataType:'json', 
      success: function (data){ 

       $("#legalform").hide(); 
       $("#fields").show(); 
       var fieldnames =[]; 
       for(property in data.namesToSubmit){ 
        fieldnames.push(property); 
       } 
       var fields=[]; 
       for(var i=0; i<data.textfieldHeaders.length; i++){    
       fields.push(data.textfieldHeaders[i],'<br>','<input name="',fieldnames[i],'" type="text"              ',data.namesToSubmit[fieldnames[i]] == "required"?"required":"",'>','<br/>');   
       }     

       fields.push("<br>", 'Pflichtfelder (*)'); 
       $("#fieldsForm").prepend(fields.join(''));    
      }, 
      error: function(jqXHR,textStatus,errorThrown){ 
       console.log(jqXHR); 
       console.log(textStatus); 
       console.log(errorThrown); 
      } 
     }); 
    }); 

和我得到的错误在这行

for(property in data.namesToSubmit){ 

试过MD5,didn't工作,但感谢你的帮助

+0

使用'md5(“GmbH&Co.KG”)'值作为密钥 – DevZer0

+0

您是否在动态获取'GmbH&Co.KG',或者您是否期望它是? – JohnnyFaldo

+0

ideone工作得很好:http://ideone.com/oidyJF – jh314

回答

2

变更请求方法POST

$.ajax({ 
    type:'POST', 
    url: 'http://192.168.10.24/php/sig.php', 
    data: {selectedLegalform: selection}, 
    ... 

在PHP:

$data = $_POST['selectedLegalform']; 

如果通过GET发送字符串GmbH & Co.KG变得GmbH%20%26%20Co%2EKG。这应该是问题。

+0

它的工作原理,谢谢 – Adrian

1

可以更换'&'在数组中使用'-and-',并在使用数组时重新替换。希望它会有所帮助。我通常这样做。

为替换,使用str_replace()

3

从PHP Manual

密钥可以是一个整数或字符串。该值可以是任何类型的 。

此外以下项石膏将发生:

  • 含有有效整数字符串将被强制转换为整数类型。例如。键“8”实际上将被存储在8以下。另一方面,“08”不会被转换,因为它不是有效的十进制整数。
  • 浮点数也被转换为整数,这意味着小数部分将被截断。例如。键8.7实际上将被存储在8以下。
  • Bools也被转换为整数,也就是说,关键字true将被实际存储在1以下并且关键字false被置于0以下。
  • Null将被转换为空字符串,即密钥null实际上将被存储在“”之下。
  • 数组和对象不能用作键。这样做会导致警告:非法偏移类型。

因此,而不是在你的数组键使用&,您可以使用str_replace()符合所允许的字符来代替它,一旦数组声明,你可以用&替换回来。

另一种方法是使用md5(),所建议的here

md5('GmbH & Co.KG' => array(... 

希望这有助于!

+1

不是&允许的字符? – Joni

+0

它对我来说工作正常,但我认为最好不要让'&'确保它在任何地方都能正常工作。 –