【问题标题】:PHP: special character as key in arrayPHP:特殊字符作为数组中的键
【发布时间】:2013-07-25 09:18:00
【问题描述】:

我的问题是我使用特殊字符 & 作为键,这似乎不起作用

我的数组是这样的

$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,没用,谢谢大家的帮助

【问题讨论】:

  • 使用md5("GmbH &amp; Co.KG") 值作为键
  • 您是动态地获得“GmbH & Co.KG”还是您期望它是这样?
  • ideone 工作得很好:ideone.com/oidyJF
  • 这样的钥匙没有问题。在 PHP 5.4 上运行良好
  • 它应该可以正常工作..你能展示你如何访问数组吗?

标签: php arrays key special-characters


【解决方案1】:

来自 PHP Manual:

键可以是整数或字符串。该值可以是任何 输入。

此外,还会发生以下关键转换:

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

因此,您可以使用str_replace() 将其替换为允许的字符,而不是在数组键中使用&amp;,并且一旦声明了数组,您就可以将其替换为&。

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

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

希望这会有所帮助!

【讨论】:

  • & 不是允许的字符吗?
  • 它对我来说很好用,但我认为最好不要有&amp; 以确保它在任何地方都能正常工作。
【解决方案2】:

将请求方式改为POST

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

在 PHP 中:

$data = $_POST['selectedLegalform'];

如果您通过GET 发送字符串GmbH &amp; Co.KG,它将变为GmbH%20%26%20Co%2EKG。这应该是问题所在。

【讨论】:

    【解决方案3】:

    您可以将数组中的“&”替换为“-and-”,并在使用数组时再次替换。希望它会有所帮助。我通常会这样做。

    替换,使用str_replace()

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 2015-11-07
      • 2016-10-07
      • 1970-01-01
      • 2018-04-09
      • 2017-04-15
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多