0

我正在创建一个页面,用户可以通过提交内容的数字对象标识符 (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 时

您如何编写 URL 以包含该'$_POST[send_doi]'值?

4

2 回答 2

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

添加了一个问号,因为我在您的 URL 中没有看到它。一个更好的选择是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',
    ))
);
于 2012-10-19T17:07:29.337 回答
0

试试这个:

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

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

此外,请确保验证该输入,以免对该 API 进行错误调用。正则表达式运行良好。参见:preg_match()。

于 2012-10-19T17:04:07.093 回答