PHP - 对象的节点 - 包含“-”的变量名称

PHP - Node of a object - Variable name with "-" inside

提问人:andymnc 提问时间:12/6/2012 最后编辑:Communityandymnc 更新时间:3/9/2017 访问量:170

问:

根据讨论 如何检查字符串是否可以用作PHP中的变量名? 用户 TIM 给出了一个很好的答案,但仍然没有解决我的问题。

我完全是这样做的,但是在生产服务器上,他们有魔术报价 gpc active!和。。答案是肯定的。。我不能禁用它,我不能要求禁用,最后但并非最不重要的一点是,我不能在运行时禁用它(根据手册)。 所以在这种情况下,即使使用

echo $xml->example->{'phone-number-1'};

PHP 正试图在这些东西之间执行数学运算,在这种情况下,我真的很生气地了解如何访问该“节点”。

当然,如果我用魔术引号 OFF 测试这一点,一切都按照手册进行。

先谢谢你

PHP 对象 变量

评论

1赞 deceze 12/6/2012
它不是试图在这里执行任何数学运算,我可以保证这一点。您确定该问题与魔术报价有关吗?您的输入从何而来,受到魔术报价的影响?
0赞 MatsLindh 12/6/2012
为了能够说明为什么magic_quotes会影响您添加的代码,我们需要一个更完整的示例。显示的代码不会以当前形式执行数学运算。
0赞 andymnc 12/6/2012
我正处于这个过程的最后,我刚刚做了数百万次测试,所以......是的,我确信一切。所以问题是:我应该如何调用该节点,其结构如下: root->fields->field->node-number-1 并使用魔术引号 gpc = “ON”(服务器端)调用 $xml->.....->{'node-number-1'};在这种情况下不起作用。XML 的一部分是这样的:...<领域> .........<pref-1>123</pref-1> <ph>123456789</tel> <customer-id>1</customer-id> <node-number-1>456789</node-number-1> .........</领域> ...如果我var_dump对象,它不会显示所有带有“-”的节点
0赞 SDC 12/6/2012
我看不出魔术报价会对此产生任何影响......但是,如果您的生产服务器带有魔术报价,那么您的生产服务器存在严重的安全问题。
0赞 SDC 12/6/2012
您还没有向我们展示如何从 XML 生成对象结构。这将是有益的。但是,如果它没有显示在中,则意味着该变量不存在。可能是您使用的 XML 解析器决定无法将该元素生成为有效的 PHP 变量名,因此根本没有创建它。但需要查看更多代码才能了解更多信息。var_dump

答:

0赞 MatsLindh 12/6/2012 #1

为了详细说明所做的注释,使用您要共享的可用信息,您的代码将按广告工作,无论是否设置magic_quotes_gpc。它不会尝试对字符串执行任何算术运算,magic_quotes_gpc也不会影响 simplexml 解析其数据的方式。

~/temp  ►  cat foo.xml
<example>
    <node-ex>
       <identifier-1>ValueOfIdentifier1</identifier-1>
       <phone-number-1>141 555 1414</phone-number-1>
    </node-ex>
</example>

~/temp  ►  cat test.php
<?php
$root = simplexml_load_file("foo.xml");

echo $root->{'node-ex'}->{'identifier-1'} . "\n";
echo $root->{'node-ex'}->{'phone-number-1'} . "\n";

~/temp  ►  php test.php              
ValueOfIdentifier1
141 555 1414
~/temp  ►  php -dmagic_quotes_gpc=1 test.php
ValueOfIdentifier1
141 555 1414

当然,如果您的示例与您实际使用的数据不同,则可能是问题所在。如果启用了magic_quotes_gpc,使用 stripslashes() 应该可以反转它,然后它应该可以工作。如果您使用的不是常量字符串,而是变量,则可能是问题的原因。但是,您的示例中没有任何内容指示应受属性名称中magic_quotes_gpc或使用“-”影响的任何内容。

评论

0赞 andymnc 12/6/2012
我可以请你在这里写一个关于 echo $root->{'node-ex'}->{'phone-number-1'} 的条形斜杠示例吗?
0赞 MatsLindh 12/7/2012
好吧,由于这里没有值可以应用任何magic_quotes_gpc,所以真的没有什么可以调用条形斜杠的。这就是我想要表达的观点,也是为什么我们需要在示例中包含代码的上下文,因为您粘贴的代码中没有任何需要条形斜杠的继承内容。
0赞 andymnc 12/7/2012
只是想对@fiskfisk说他对了,并原谅我问错了问题。问题是我在相同类型的机器上检查相同的软件(我在想......),相同的灯版本,并且只有 magic_quotes_gpc 2 台服务器之间的差异。只是为了发现一台机器正在调用地理定位器服务器地址,而另一台机器正在调用另一个地理定位器。所以我在其中一个节点上收到这些节点完全是空的。再次感谢fiskfisk,我很抱歉提出错误的问题。