我想使用http_build_query将数组更改为html标签属性。问题是,它将我的单引号值更改为%27
。所以,如果我有在http_build_query()中保留单引号?
http_build_query(array("type"=>"'hidden'", ...), '', ' ');
我得到
<input type=%27hidden%27 ...>
我怎样才能解决这个得到什么?
我想使用http_build_query将数组更改为html标签属性。问题是,它将我的单引号值更改为%27
。所以,如果我有在http_build_query()中保留单引号?
http_build_query(array("type"=>"'hidden'", ...), '', ' ');
我得到
<input type=%27hidden%27 ...>
我怎样才能解决这个得到什么?
,你可以在http_build_query
像前加urldecode()
。不建立HTML标签。你可以做几件事情:
添加所有手动
<input type="<?php echo htmlspecialchars($array['type']); ?>" ...
建立一个辅助函数
function buildArgs($array) {
$ret = '';
foreach ($array as $key => $value) {
$ret .= ' ' . htmlspecialchars($key, ENT_QUOTES) . '="' . htmlspecialchars($value) . '"';
}
return trim($ret);
}
<input <?php echo buildArgs(array('type'=>'hidden', 'name'=>'foo')); ?>>
会产生你:
<input type="hidden" name="foo" >
我想你可以绕过这个做rawurldecode()
的结果,但这真的不是http_build_query
的目的。并且不会在名称/值对之间放置一个&
,从而使输出不可用作为input
元素?
你可以使用其中一个XML类来做到这一点,但我不确定这是值得的。你在哪里使用这个?
<?php
urldecode(http_build_query(array("type"=>"'hidden'", ...), '', ' '));
?>
第三个参数是结果字符串的参数分隔符,我将其设置为'''',现在不存在空格而不是&符号。基本上我想做一个'implode()',但也使用它们的键。我的数组是'array'('key'=>'value','key'=>'value',...)',我需要那里的键。 – user151841 2010-05-25 16:39:01
http_build_query()
旨在把参数数组到一个URL:
为什么在'http_build_query()'几乎完成我想要的功能时编写一个新函数? 'urldecode()'使它完美工作。 – user151841 2010-05-25 16:43:11
不,它不能正常工作。 'http_build_query()'将会跳过参数,因为它们需要位于一个URL中(你可以通过urldecode进行解析)。它不会为html转义做任何事情。所以如果你使用它,你会引入XSS漏洞。只是因为某些东西似乎有效,并不意味着你应该使用它... – ircmaxell 2010-05-25 16:45:35
'urldecode(http_build_query(array_map('htmlspecialchars',&$ arrValues),'',''))''。为什么重新发明轮子? – user151841 2010-05-25 17:10:04
无引号是必需的阵列这个函数在:
一个班轮为HTML的创建字符串属性(带引号)从一个简单的数组:
$attrString = str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";
$attrArray = array("id" => "email",
"name" => "email",
"type" => "email",
"class" => "active large");
echo str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";
// Output:
// id="email" name="email" type="email" class="active large"
这似乎有点倒退,但它确实有效! – Matthew 2011-05-16 20:24:57