有什么方法可以在线(意思是作为上传表单的一部分,所以在 php/javasctipt 中)获取 DOCX 和 ODT 中保存的文档空格的字符数(如果可能,还有 RTF)?我的意思是,要获得与 Words 统计信息中显示的相同的字符数?
我知道,那个词已经存储<characters>
在他的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).";
例如,如果我上传这个文件,我会通过我的代码76015
字符得到,但 Word 显示76113
有一百个在某处丢失。
有谁知道如何使它更精确?您的帮助将不胜感激。
更多更新
我发现其中没有太大区别:用于计算长度的函数 -mb_strlen( $text )
和 strlen( utf8_decode( $text ))
但可能导致问题的原因是读取 zip 文件会导致一些麻烦 - 在字符串前后添加空格并添加一些未打印但被计算在内的字符。任何想法?如果我将相同的文本直接复制/粘贴到计数功能中,它可以毫无问题地工作......