0

我有 JPG 图像,里面有 XMP 元数据。
我想读取这些数据,但是如何读取?

$content = file_get_contents($fileName);
var_dump($content);

显示实际字节数,553700

$len = strlen($content);
var_dump($len);

显示373821

所以,我不能简单地做

$xmpStart = strpos($content, '<x:xmpmeta');

因为我得到了错误的偏移量。那么,问题是,如何在 PHP 中从二进制文件中查找和读取字符串?(我ON在 php.ini 中有 mb_string 选项)

UPD1:

我有一些二进制文件。我如何检查 PHP,这个文件是否包含多个字符串?

4

3 回答 3

1

Getid3是一个声称能够读取 XMP 元数据的 PHP 包。

于 2011-09-30T08:03:51.487 回答
1

从本质上讲,您正在阅读什么样的数据并不重要 -strlen()等。应该总是工作。

我认为这里发生的是在您的服务器上,strlen()内部被覆盖mb_strlen()并且内部字符编码设置为 UTF-8。

UTF-8 是一种多字节编码,因此(非常随意的)字节流中的某些字符会被解释为多字节字符 - 导致长度缩短,373821而不是553700.

我想不出比始终明确指定单字节编码更好的解决方法,例如iso-8859-1

 $pos = strpos($content, '<x:xmpmeta', 0, 'iso-8859-1');

这迫使strpos()(或者更确切地说,mb_strpos())计算数据中的每个字节。

这将始终有效;我不知道是否有更优雅的方式来强制使用单字节编码。

于 2011-09-30T19:31:47.617 回答
0

exif_read_data() PHP 函数可以帮助 XMP 元数据

更多信息在这里: http: //php.net/manual/en/function.exif-read-data.php

于 2011-09-30T08:10:22.533 回答