是否有任何方式如何在线(意味着作为上传表格的一部分,所以在php / javasctipt)得到的文件空间保存在DOCX和ODT(如果可能的话RTF)?我的意思是,要获得单词统计中显示的相同字符数?
我知道,这个词在他的 app.xml 文件中存储了 ,但是知道得很清楚 .
我试图简单地做 - 打开xmls,计算字符并获得它的值,但问题是,这种方式既不准确,请参阅我的代码:
$document = 'cvicnytext2.docx';
function extracttext($filename) {
//Check for extension
$ext = explode(".", $filename);
$ext = end($ext);
//if its docx file
if($ext == 'docx')
$dataFile = "word/document.xml";
else
$dataFile = "content.xml";
$zip = new ZipArchive;
// Open the archive file
if (true === $zip->open($filename)) {
if (($index = $zip->locateName($dataFile)) !== false) {
$text = $zip->getFromIndex($index);
$xml = new DOMDocument();
$xml->loadXML($text, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
return strip_tags($xml->saveXML());
}
$zip->close();
}
return "File not found";
}
$length = strlen( utf8_decode( extracttext($document) ) );
echo "Length: ". $length."(chars with spaces).";
如果我上传例如这个file我得到了我的代码 76015 字符,但Word显示 76113 所以一百个在某处丢失了 .
有人知道如何使它更精确吗?我们将不胜感激 .
Some more UPDATES
我发现内部没有太大区别:用于计算长度的函数 - mb_strlen( $text ) 和 strlen( utf8_decode( $text ))
但是可能导致问题的原因是读取zip文件会导致一些麻烦 - 在字符串之前和之后添加空格并添加一些未打印的字符,但它们会被计算在内 . 任何的想法?如果我将相同的文本直接复制/计算到计数功能,它可以毫无困难地工作......