在PHP中使用$ _POST构造URL

时间:2012-10-19 17:00:08

标签: php xml post

我正在创建一个页面,用户可以通过提交内容的数字对象标识符(DOI)向数据库提交有关内容的元数据。然后,该网站将在www.crossref.org上查找内容的元数据,并在将数据添加到数据库之前提供数据摘要

我为用户创建了一个表单,用于输入DOI

<FORM ACTION="newref-getxml.php" METHOD=POST>
<P><strong>New Reference Form</strong><BR>
DOI: <INPUT NAME="send_doi"><BR>
<BR>
<INPUT TYPE=SUBMIT NAME="submitref" VALUE="SUBMIT">
</FORM>

用于获取和读取XML的文件(由于显而易见的原因,我已从URL中删除了我的API KEY)

<?php
  echo $_POST[send_doi]; // check post data is coming though
  $xml = simplexml_load_file("http://www.crossref.org/openurl/id=doi:'$_POST[send_doi]'&noredirect=true&pid=APIKEY&format=unixref");
?>
<p>
   Title: <?php echo $xml->doi_record->crossref->journal->journal_article->titles->title;?><br />
   Year: <?php echo $xml->doi_record->crossref->journal->journal_article->publication_date->year;?><br />
   Journal: <?php echo $xml->doi_record->crossref->journal->journal_metadata->full_title;?><br />
   DOI: <?php echo $xml->doi_record->crossref->journal->journal_article->doi_data->doi;?>
</p>

问题在于将用户提交的DOI插入到URL中,我想我可以将'$_POST[send_doi]'粘贴到DOI应该去的URL中,但这不起作用。

我得到的只是

10.3998 / 3336451.0009.101 标题: 年: 日志: DOI:

提交DOI时

如何编写包含'$_POST[send_doi]'值的网址?

2 个答案:

答案 0 :(得分:2)

simplexml_load_file("http://www.crossref.org/openurl/id".
    "?doi=".urlencode($_POST[send_doi]).
    "&noredirect=true&pid=APIKEY&format=unixref");

添加了一个问号,因为我在您的网址中没有看到它。更好的选择是http_build_query()。看看吧!

simplexml_load_file('http://www.crossref.org/openurl/id?'. // <- Question Mark here
    http_build_query(array(
        'doi'       => $_POST[send_doi],
        'noredirect'    => 'true',
        'pid'       => 'APIKEY',
        'format'    => 'unixref',
    ))
);

答案 1 :(得分:0)

试试这个:

$xml = simplexml_load_file("http://www.crossref.org/openurl/id=doi:'{$_POST['send_doi']}'&noredirect=true&pid=APIKEY&format=unixref");

string类型的数组键需要封装在单引号中。将变量包含到字符串中时,请使用{}将变量本身括起来。

此外,请确保验证该输入,以便您没有对该API进行错误的调用。正则表达式运作良好。请参阅:preg_match()。