我试图在php 5.2中使用strlen()找出字符串的确切长度。字符串($ data)包含'\ t'和'\ n'。
echo strlen($data);
代码:
// fetch table header
$header = '';
while ($fieldData = $result->fetch_field()) {
$header .= $fieldData->name . "\t";
}
// fetch data each row, store on tabular row data
while ($row = $result->fetch_assoc()) {
$line = '';
foreach($row as $value){
if(!isset($value) || $value == ""){
$value = "\t";
}else{
// important to escape any quotes to preserve them in the data.
$value = str_replace('"', '""', $value);
// needed to encapsulate data in quotes because some data might be multi line.
// the good news is that numbers remain numbers in Excel even though quoted.
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
// this line is needed because returns embedded in the data have "\r"
// and this looks like a "box character" in Excel
$data = str_replace("\r", "", $data);
// Nice to let someone know that the search came up empty.
// Otherwise only the column name headers will be output to Excel.
if ($data == "") {
$data = "\nno matching records found\n";
}
// create table header showing to download a xls (excel) file
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$export_filename");
header("Cache-Control: public");
header("Content-length: " . strlen($data); // tells file size
header("Pragma: no-cache");
header("Expires: 0");
// output data
echo $header."\n".$data;
这不会返回确切的长度(小于实际长度)。请指教。
答案 0 :(得分:13)
您告诉用户代理期望strlen($ data)然后实际发送$ header。“\ n”。$ data!在代码的末尾尝试这样的事情......
$output=$header."\n".$data;
// create table header showing to download a xls (excel) file
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$export_filename");
header("Cache-Control: public");
header("Content-length: " . strlen($output); // tells file size
header("Pragma: no-cache");
header("Expires: 0");
// output data
echo $output;
答案 1 :(得分:2)
答案 2 :(得分:1)
在获取字符串长度之前,请使用'\t'
删除'\n'
中的$data
和str_replace
符号,或者如果strlen()
确实存在错误,请删除其他函数(我没有检查过。)
答案 3 :(得分:1)
内容长度标题不包括标题的长度加上响应的主体。
Content-Length:以八位字节为单位的响应正文的长度(8位字节)
仅供参考,因为“回答”中使用的变量是标题+数据。不要被误导。
答案 4 :(得分:1)
您同时回复了$header
和$data
,但您只将Content-Length
设置为$data
的大小。
如果$header
包含其他HTTP标头,则应使用$header
输出header()
。否则,您应将Content-Length
设置为strlen($header."\n".$data)
。