在PHP中使用$\u POST构建URL

在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

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

新的参考表格
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',
    ))
);