【问题标题】:using ' and " in php syntax [duplicate]在 php 语法中使用 ' 和 " [重复]
【发布时间】:2013-01-06 07:07:02
【问题描述】:

可能重复:
How to get useful error messages in PHP?

我开始着手我的新年计划,并决定学习 php,作为其中的一部分,我试图解析一个 xml 提要,并回显包含在 <a> 标记中的事件名称,将它们链接回xml 提要网站上的事件页面。

我想我已经全部完成了,但我似乎不明白为什么这不起作用我只是得到一个空白页,如果有人能指出我正确的方向,我将不胜感激,干杯

<?php 
  // F1 W/H xml feed
  $xml = simplexml_load_file('http://whdn.williamhill.com/pricefeed/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=5&marketSort=HH&filterBIR=N');

  foreach ($xml->response->williamhill->class->type as $type) {
    $type_attrib = $type->attributes();
    echo "<h2>".$type_attrib['name']."</h2>"; //Title - in this case f1 championship
} ?>


<ul>
  <?php 
      foreach($type->market as $event) {
          echo "<li>";
          echo "<a href="$event_attributes['url']">";
          echo $event_attributes['name'];
          echo "</a>";
          echo "</li>";
      }
  ?>
</ul>

【问题讨论】:

  • 空白的 PHP 页面通常意味着错误。检查您的错误日志或打开display_errors
  • 在 php.ini / .htaccess / .user.ini 中启用error_reporting(在调用脚本中为语法错误太晚了)。
  • 你的$event_attributes数组是怎么解析的?

标签: php syntax simplexml php-5.2


【解决方案1】:
echo "<a href="$event_attributes['url']">";

尝试将该行更改为

echo "<a href=\"".$event_attributes['url']."\">";

Php 解析器对此非常有趣。通常你选择一个并坚持下去,或者随意使用单引号和双引号。请记住,带有双引号的字符串会被解析为变量。

$hello = "Hello";
echo "$hello master";

一样
$hello ="Hello";
echo $hello.' master';

【讨论】:

  • 我觉得你甚至可以说"&lt;a href='$event_attributes[url]'&gt;";
  • 如果你有一个不挑剔的警告政策应该是可能的 :-)
【解决方案2】:

当你测试你的 PHP 脚本时,你会发现打开错误很有用 - 然后 PHP 会告诉你为什么它没有显示任何东西:

error_reporting(E_ALL);

通常您会错过; 或输入错误的变量名。

在你的情况下,错误在这里:

echo "<a href="$event_attributes['url']">";

你不小心用双引号结束了字符串,所以 PHP 认为字符串在这里结束:

echo "<a href="

这是使用单引号非常方便的地方,因为您的双引号不会关闭字符串。

echo '<a href="' . $event_attributes['url'] . '">';

PHP 中单引号和双引号的主要区别在于,双引号具有特殊的巧妙解析规则,而单引号则没有。例如:

$myVar = "BLAH";
echo "Example $myVar"; // Example BLAH
echo 'Example $myVar'; // Example $myVar

【讨论】:

    【解决方案3】:

    在你的无序列表中,你应该使用一个点来连接你的字符串,并像这样转义你的双引号:

    echo "<a href=\"".$event_attributes['url']."\">";
    

    代替

    echo "<a href="$event_attributes['url']">";
    

    您的示例抛出错误,因为您没有使用正确的字符串连接。但是,即使使用正确的 concat,它也会呈现为 &lt;a href=http://someurl&gt;,并且您需要根据 html 标准添加双引号。因此你必须双引号。

    【讨论】:

      【解决方案4】:

      如果您不想在使用'" 之间切换而烦恼,那么我建议使用php 替代语法php alternative syntax

      使用给定的代码看起来像

      <?php 
      // F1 W/H xml feed
      $xml = simplexml_load_file('http://whdn.williamhill.com/pricefeed/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=5&marketSort=HH&filterBIR=N');
      
      foreach ($xml->response->williamhill->class->type as $type) {
          $type_attrib = $type->attributes();
          echo "<h2>".$type_attrib['name']."</h2>"; //Title - in this case f1 championship
      } ?>
      
      <ul>
          <?php foreach($type->market as $event):?>
              <li>
                  <a href="<?php echo $event_attributes['url']; ?>">
                      <?php echo $event_attributes['name']; ?>
                  </a>
              </li>
          <? endforeach;?>
      </ul>
      

      这将带来的一个好处是它会产生更清晰的代码,因为您可以清楚地将您的 php 代码与您的 html 区分开来声称性能下降。选择是你的

      【讨论】:

        【解决方案5】:

        改变

        echo "<a href="$event_attributes['url']">";
        

        echo "<a href=".$event_attributes['url'].">";
        

        【讨论】:

          【解决方案6】:

          您在第二个echo 中缺少句点,而您在其中有您的$event_attributes['url']

          <?php 
            foreach($type->market as $event) {
                echo "<li>";
                echo "<a href=".$event_attributes['url'].">";
                echo $event_attributes['name'];
                echo "</a>";
                echo "</li>";
            }
          

          ?>

          我建议您启用错误日志,它可以让您了解任何脚本中存在问题的行。

          【讨论】:

            猜你喜欢
            • 2011-05-21
            • 1970-01-01
            • 2012-09-16
            • 2015-06-05
            • 1970-01-01
            • 1970-01-01
            • 2018-03-15
            • 2016-02-21
            • 1970-01-01
            相关资源
            最近更新 更多