【问题标题】:Incorrect parsing of variable string into GET query string将变量字符串错误解析为 GET 查询字符串
【发布时间】:2013-11-19 13:39:10
【问题描述】:

代码:

function updateGUI()
    {
        foreach ($GLOBALS['content_array'] as $i)
        {
            $title = $i[0];
            $rating = $i[1];
            echo "<li class=contentList><a class=contentListLink href=filmer_php.php?title=".$title."><span class=spantitle>".$title."</span><span class=spanrating>".asteriskifyRating($rating)."</span></a></li>";
        }
    }

输出:

资源: http://dist3.webbintro.se/assignments/3/movies.txt

context:所以我正在创建 &lt;li&gt; 并附有 &lt;a&gt;,并且我从全局变量(不重要)中获取 &lt;li&gt;$title。 问题是查询字符串不包含完整的字符串,因为某些$title 包含空格,因此它们在空格处被截断。我试过使用转义字符\" 但没有用,我找不到任何关于如何正确解析的好文章.. 我也希望解决方案不包含正则表达式,但如果只能使用正则表达式解决,那就这样吧。

EDIT1: 上下文:好的,urlencode 解决了最大的问题。在“星球大战”之前我仍然得到一个 mojibake 方块,有什么建议吗?

完整代码: http://jsfiddle.net/Uv5bV/

EDIT2: 删除了 utf-8 BOM,从这个线程得到了解决方案:How to remove multiple UTF-8 BOM sequences before "<!DOCTYPE>"?

代码:

function remove_utf8_bom($text)
    {
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
    }

【问题讨论】:

  • 您可能想要检查您正在生成的 HTML。您需要在链接周围加上引号 - 目前,它实际上是 &lt;a href=filmer_php.php?title=Star Wars&gt;,空格之后的任何内容都被视为标签的单独属性。

标签: php string parsing get query-string


【解决方案1】:

添加url encoding:

echo '<li class="contentList"><a class="contentListLink" href="filmer_php.php?title='.urlencode($title).'"><span class="spantitle">'.$title.'</span><span class="spanrating">'.asteriskifyRating($rating).'</span></a></li>';

您还应该更加注意引号(单引号和双引号)。

【讨论】:

  • 工作,谢谢。不知道为什么我没有在 php 参考中搜索这个。。“星球大战”之前的 mojibake 方块仍然存在,你知道我该如何删除它吗?
  • 为此,您必须在循环之前检查您的数据.. 似乎它之前已经存在的奇怪字符,因为循环代码看起来很好。
  • 好的,我已将代码添加到问题中(检查 jsfiddle)。我从文本文件中删除了《星球大战》,然后加载了 3 个条目,mojibake 现在出现在 Fight Club 之前,所以它似乎与阅读过程有关。
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2015-03-19
  • 2015-02-06
  • 2019-07-24
相关资源
最近更新 更多