我正在创建一个页面,用户可以通过提交内容的数字对象标识符(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]'
值的网址?
答案 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()。