我经常使用THEAD,TBODY和TFOOT元素将我的数据表划分为可以用CSS单独处理的部分.我也明白,总有一个隐含的TBODY标签.
令我困惑的是这些必须进行验证的顺序.该表将验证:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Table Validation Test</title>
</head>
<body>
<table>
<thead>
<tr>
<th scope="col">Enemies List</th>
</tr>
</thead>
<tfoot>
<tr>
<td>© Bomb Voyage</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>Mr. Incredible</td>
<td>Elastigirl</td>
<td>Gazer Beam</td>
</tr>
</tbody>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是这个不会:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Table Validation Test</title>
</head>
<body>
<table>
<thead>
<tr>
<th scope="col">Enemies List</th> …Run Code Online (Sandbox Code Playgroud) 我正在尝试与ybp.com集成,ybp.com是一家专有软件供应商,负责管理大型图书馆的图书订购工作流程.它一直在向我提供包含编码为额外"25"的字符的URL.喜欢这本书的标题:
VOLATILE KNOWING%253a PARENTS%252c TEACHERS%252c AND THE CENSORED STORY OF ACCOUNTABILITY IN AMERICA%2527S PUBLIC SCHOOLS.
Run Code Online (Sandbox Code Playgroud)
此示例中的编码字符如下:
%253a = %3A = a colon
%252c = %2C = a comma
%2527 = %27 = an apostrophe (non-curly)
Run Code Online (Sandbox Code Playgroud)
我需要将这些编码转换为我的内部应用程序可以识别的格式,而额外的25种方法则会让事情变得更糟.十六进制编码字符的最后两位数字看起来与标准URL编码相同,因此强力方法是将"%25"替换为"%".但我知道这样做是因为当某个实际的%25因某种原因出现时肯定会困扰我.
那么,这个标准是什么?是否有官方算法将这样的值转换为其他编码?
我有一个非常简单的测试脚本:
<?php
$DSN = "mysql:host=db.example.edu;port=3306;dbname=search_data";
try {
$DB = new PDO($DSN, "username", "super-secret-password!");
} catch (PDOException $e) {
header('Content-Type: text/plain');
print "Could not connect to database, rawr. :-(";
exit;
}
$SQL = "SELECT phrase FROM search ORDER BY RAND() LIMIT 10";
foreach($DB->query($SQL) as $row){
print $row['phrase']."\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
当我从命令行执行此脚本时,它完美地工作:
$ php test.php
corporal punishment
Stretches
voluntary agencies and the resettlement of refugees
music and learning
Nike Tiger Woods Scandal
Hermeneia
PSYCHINFO
anthony bourdain
Black-White Couples and their Social Worlds
colonization, …Run Code Online (Sandbox Code Playgroud) 为什么函数处理函数不call_user_func()支持通过引用传递参数?
该文件说,简洁喜欢的东西"请注意,对于call_user_func()的参数不是按引用传递." 我假设PHP开发人员在这种情况下有某种原因禁用该功能.
他们是否面临技术限制?它是语言设计的选择吗?这是怎么发生的?
编辑:
为了澄清这一点,这里有一个例子.
<?php
function more(&$var){ $var++; }
$count = 0;
print "The count is $count.\n";
more($count);
print "The count is $count.\n";
call_user_func('more', $count);
print "The count is $count.\n";
// Output:
// The count is 0.
// The count is 1.
// The count is 1.
Run Code Online (Sandbox Code Playgroud)
这是正常运作的; call_user_func不会通过引用传递$ count,即使more()将其声明为引用变量.该call_user_func文件清楚地说,这是它应该工作的方式.
我很清楚我可以通过使用获得我需要的效果call_user_func_array('more', array(&$count)).
问题是:为什么call_user_func 设计为这样工作?在路过的参考文档说,"功能定义的本身就足以正确传递引用的论点." call_user_func的行为是一个例外.为什么?
我有一个允许一个文件附件的表单,并生成一个硬编码地址的电子邮件.我想避免恶意用户输入自定义邮件头的可能性(CRLF注入,因为电子邮件头根据RFC以\ r \n结尾,因此被调用).
假设我对每个可能进入$ additional_headers参数的数据运行以下函数:
<?php
function strip_crlf($string){ return str_replace("\r\n", "\n", $string); }
?>
Run Code Online (Sandbox Code Playgroud)
这取代了CRLF对的回车一半.这会充分防止潜在的攻击吗?
通常我会用空字符串替换\ r \n.但是这种特殊形式允许一个附件,这意味着消息体实际上最终通过$ additional_headers参数传递,因为PHP没有用于构建多部分MIME编码电子邮件的本机函数(我知道).
如果有人关心,这是我邮寄附件的功能:
<?php
function mail_attachment($to, $from, $from_name, $subject, $message, $file = false, $filename = false, $filetype = false){
// Remove CRLF sequences from everything that might go into a header
$from = strip_crlf($from);
$from_name = strip_crlf($from_name);
$message = strip_crlf($message);
if($filename){ $filename = strip_crlf($filename); }
if($filetype){ $filetype = strip_crlf($filetype); }
// $to and $subject escaping handled natively by mail();
// $file …Run Code Online (Sandbox Code Playgroud) 我在这里有一个测试用例:
http://www.libsys.und.edu/dev/scroll-test.html
它有一个包含很长链接列表的DIV.我想将DIV滚动到给定的链接.在我的测试用例中,通过按下JSTOR按钮完成,将按钮推进到JSTOR链接.在实际生产样本中,将基于键盘输入选择链接.因此,例如,按"B"将其推进到第一个"B"链接,即生物学文摘.
我的测试用例中的预期结果是:我单击JSTOR,它滚动,因此JSTOR位于DIV的顶部.这可能涉及向下或向上滚动,具体取决于DIV已经滚动了多远.
实际结果取决于DIV是否已经滚动.
如果DIV根本没有滚动,那么它在所有浏览器中都能正常工作.
如果DIV已经滚动(甚至一点点),结果如下:
此外,在某些我无法令人满意地识别的情况下,Chrome和Safari都会向下滚动并将JSTOR链接垂直居中放置在DIV 的中间.
Opera是唯一能够始终如一地实现我期望的浏览器.Firefox和IE以不同的方式做到这一点,但至少以不同的方式做到这一点,并且他们的行为相互匹配; 我不知道Chrome和Safari的行为是什么.
那么 - 是否有某种方式可以滚动DIV,使得目标链接总是在浏览器中相对于其父级位于相同的位置?我甚至不关心它是否在顶部,真的,尽管这对我来说最有意义.只要我能以一致的方式让它以同样的方式工作,我会很高兴.
对于长期记录,这是我的CSS和JS; HTML只是一个很长的DIV内部链接列表,ID为"box".我试图制作一个JS Fiddle,但它死在我身上 - 我认为它不喜欢HTML源代码的长度.
CSS:
#box {
width: 300px;
height: 200px;
overflow: auto;
position: relative;
}
#box ul {
margin: 0;
padding: 0;
list-style: none;
}
Run Code Online (Sandbox Code Playgroud)
JS:
// I'm running scrollTop() and position().top through Math.floor() because
// Firefox likes …Run Code Online (Sandbox Code Playgroud) 考虑这个程序:
(function(x){
delete x;
return x;
})(1);
Run Code Online (Sandbox Code Playgroud)
什么是输出?
它碰巧是,1而不是undefined我所期望的.我认为x纯粹是在函数范围内,并且在函数内部删除它应该使它在外部无法访问.
有人可以对此有所了解吗?
假设我有这样的查询:
SELECT
s.staffID as staffID,
CONCAT_WS(", ", lname, fname) AS name,
GROUP_CONCAT(unit SEPARATOR ", ") AS units
FROM
staff s,
units u,
staff_units r
WHERE
s.staffID = r.staffID
AND u.unitID = r.unitID
GROUP BY s.staffID
ORDER BY lname
Run Code Online (Sandbox Code Playgroud)
这得到一个这样的列表:
Alice Accounting
Bob Systems
Charlie Customer Services, Administration
Run Code Online (Sandbox Code Playgroud)
好的,到目前为止.现在假设我删除了staff_units记录Alice作为Accounting成员的条目.然后,运行此查询将生成一个列表,从中排除Alice,即使她仍然存在于staff表中:
Bob Systems
Charlie Customer Services, Administration
Run Code Online (Sandbox Code Playgroud)
我可以调整这个SQL,以便它继续返回Alice,结果显示她未分配给一个单元吗?
我当然可以运行一个查询来获取人员列表,并为每个人员查询另一个查询以获取当前分配.但这意味着要运行n + 1个查询来构建列表,其中n是人员数量,这只是让我错了.
php ×3
javascript ×2
mysql ×2
callback ×1
connection ×1
email ×1
encoding ×1
html ×1
jquery ×1
newline ×1
pdo ×1
reference ×1
sanitization ×1
scroll ×1
security ×1
sql ×1
url ×1
validation ×1
xhtml ×1