在PHP中使用$\u POST构建URL
我正在创建一个页面,用户可以通过提交内容的数字对象标识符(DOI)向数据库提交关于内容的元数据。然后,该网站将在www.crossref.org上查找内容元数据,并在将其添加到数据库之前提供数据摘要 我已经创建了一个表单供用户输入DOI在PHP中使用$\u POST构建URL,php,xml,post,Php,Xml,Post,我正在创建一个页面,用户可以通过提交内容的数字对象标识符(DOI)向数据库提交关于内容的元数据。然后,该网站将在www.crossref.org上查找内容元数据,并在将其添加到数据库之前提供数据摘要 我已经创建了一个表单供用户输入DOI <FORM ACTION="newref-getxml.php" METHOD=POST> <P><strong>New Reference Form</strong><BR> DOI: <INP
<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>
新的参考表格
DOI:
以及一个用于获取和读取XML的文件(出于明显的原因,我已经从URL中删除了API密钥)
标题:doi_记录->交叉引用->日志->日志文章->标题->标题;?>
年份:doi_记录->交叉引用->期刊->期刊文章->出版日期->年份;?>
日志:doi\u记录->交叉引用->日志->日志元数据->完整标题;?>
DOI:DOI_记录->交叉引用->日志->日志文章->DOI_数据->DOI;?>
问题是将用户提交的DOI插入到URL中,我想我可以将'$\u POST[send\u DOI]'
粘贴到DOI应该去的URL中,但这不起作用
我得到的只是
10.3998/3336451.0009.101
标题:
年份:
期刊:
内政部:
提交DOI时
如何编写URL以包含'$\u POST[send\u doi]
值?尝试以下操作:
$xml = simplexml_load_file("http://www.crossref.org/openurl/id=doi:'{$_POST['send_doi']}'&noredirect=true&pid=APIKEY&format=unixref");
字符串类型的数组键需要封装在单引号中。将变量包含到字符串中时,请使用{}将变量本身括起来
另外,请确保您验证了该输入,这样就不会有对该API的错误调用。正则表达式运行良好。请参阅:preg_match()
添加了一个问号,因为我在你的URL中没有看到它。更好的选择是()。看看
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',
))
);
simplexml\u加载文件('http://www.crossref.org/openurl/id?“./$\u POST[send\u doi],
'noredirect'=>'true',
“pid'=>“APIKEY”,
“格式”=>“unixref”,
))
);
-1(仅在注释中):urlencode()字符串人!这是一个网址。send_doi是用户输入。不要相信用户输入+1为了让我知道http_build_查询存在,我确信我可以使用that@ContextSwitch谢谢它与PHP4不兼容,人们似乎在回避它。但它是2012和PHP5.4版本,特别是对于构建正确编码的请求,而不必进行mad连接,非常有用。Plus代码比mad查询字符串串联更简洁,易于修改数组。
simplexml_load_file("http://www.crossref.org/openurl/id".
"?doi=".urlencode($_POST[send_doi]).
"&noredirect=true&pid=APIKEY&format=unixref");
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',
))
);