如何使编码未知的字节序列可用作 PHP 的输入?
Posted
技术标签:
【中文标题】如何使编码未知的字节序列可用作 PHP 的输入?【英文标题】:How can a byte sequence with unknown coding be made available as input for PHP? 【发布时间】:2021-03-09 17:03:36 【问题描述】:我有一个编码未知的文件。我可以使用 file_get_contents() 将此文件作为字符串读取。我想导出这个字符串,以便它可以作为 php 代码使用。 字符串可以使用 bin2hex () 以十六进制表示。 但是,如果没有特殊代码,这不能在 PHP 中使用。 所以我的问题: 如何使用 PHP 输出来自未知编码文件的字节序列,以使输出可以用作可重现的 PHP 代码?
【问题讨论】:
【参考方案1】:var_export
可能是您正在寻找的功能。 jspit 的解决方案也可以,但是var_export
会更紧凑。
【讨论】:
var_export() 在几个地方引起问题。正是这些问题促使我寻找另一种解决方案。我在答案中添加了一个示例。【参考方案2】:使用此功能,可以回显包含任何字符(控制字符..)的字符串。该字符串可以复制并作为字符串插入到编辑器中。
function strhex($s)
return $s != '' ? '\\x'.implode('\\x',str_split(bin2hex($s),2)) : '';
示例:
$str = "íéťů4€ "; //"my unknown string"
echo strhex($str);
//\xc3\xad\xc3\xa9\xc5\xa5\xc5\xaf\x34\xe2\x82\xac\x20\x01
复制输出并用作字符串
$input = "\xc3\xad\xc3\xa9\xc5\xa5\xc5\xaf\x34\xe2\x82\xac\x20\x01";
$input 与 $str 相同。使用此函数的输出可以在浏览器中完成并使用 Ctrl C 复制。 var_dump() 和 var_export() 等 PHP 函数在多个地方失败。
例子:
$str = "\xe2\x82";
var_export($str);
//'�'
浏览器中 var_export() 的输出在此处失败,因为 $str 不是有效的 UTF-8。 strhex() 的输出是 \xe2\x82
【讨论】:
以上是关于如何使编码未知的字节序列可用作 PHP 的输入?的主要内容,如果未能解决你的问题,请参考以下文章