Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php explode时,第一个变量是不可求的_Php_Explode - Fatal编程技术网

使用php explode时,第一个变量是不可求的

使用php explode时,第一个变量是不可求的,php,explode,Php,Explode,我有两个文件,b.txt: &first = cjnk1 &second = dcnksj2 &third = cd3 &fourth = cdln4 和a.php: <?php $data=file_get_contents("b.txt"); $rows=explode("\n", $data); foreach($rows as $row) { $temp=explode(" = ",$row); $info[ltrim($temp

我有两个文件,b.txt:

&first = cjnk1 
&second = dcnksj2
&third = cd3
&fourth = cdln4
和a.php:

<?php
$data=file_get_contents("b.txt");
$rows=explode("\n", $data);
foreach($rows as $row)
{
    $temp=explode(" = ",$row);
    $info[ltrim($temp[0],"&")]=$temp[1];
}
echo '<pre>';
print_r($info);
echo $info["&first"];
?>
第一个索引有什么问题??即使我使用它,它也是不可选择的

尝试将ltrim$temp[0]、&替换为ltrim$temp[0]、&\x00..\x1F;。这将删除所有保留的ASCII字符0-31以及与号。

尝试将ltrim$temp[0],&替换为ltrim$temp[0],&\x00..\x1F;。这将删除所有保留的ASCII字符0-31以及符号。

要通过PHP删除BOM,请执行以下操作:

$BOM = substr($txt, 0, 3);

if ( $BOM == pack("CCC", 0xEF, 0xBB, 0xBF) ) {
    $txt = substr($txt, 3);
}
更新

正如deceze所指出的,这应该也很好,但我还没有检查出来,如果有什么问题,请告诉我

要通过PHP删除BOM表,请执行以下操作:

更新

正如deceze所指出的,这应该也很好,但我还没有检查出来,如果有什么问题,请告诉我


可能在&之前有一些东西,比如不可打印字符。可能在&之前有一些转义字符。使用var_dump$temp[0];看看到底是什么。你的脚本很好用。也许你的文件头上有BOM或其他东西,请不要在Windows上使用记事本。我打赌文件开头有BOM,用谷歌搜索它。&首先应该是string6-那里有一些额外的东西。可能在&之前有一些东西,比如不可打印的字符。可能,在&之前有一些转义字符。使用var_dump$temp[0];看看到底是什么。你的脚本很好用。可能您的文件头中有BOM或其他内容,请不要在Windows上使用记事本。我打赌文件开头有BOM,请用google it搜索。&首先应该是string6-那里有其他内容。通常是的,但您可以更轻松地将BOM写为\x。。字符串文字…:@谢谢你的信息,但这意味着什么。。?请你给我一个提示,以便进一步阅读,谢谢。我的意思是:\xEF\xBB\xBF。这是BOM表的字符串文字。不需要背包。@deceze哦,明白了!我在看包装手册,想知道那是什么!再次感谢您的信息@deceze我已经更新了我的答案以反映您的观点,但是使用===是否更好?通常是的,但是您可以更轻松地将BOM编写为\x。。字符串文字…:@谢谢你的信息,但这意味着什么。。?请你给我一个提示,以便进一步阅读,谢谢。我的意思是:\xEF\xBB\xBF。这是BOM表的字符串文字。不需要背包。@deceze哦,明白了!我在看包装手册,想知道那是什么!再次感谢您的信息@我已经更新了我的答案来反映你的观点,但是使用==?
foreach($rows as $row)
{
    $temp=explode(" = ",$row);
    $info[substr($temp[0], 1)]=$temp[1];
}
$BOM = substr($txt, 0, 3);

if ( $BOM == pack("CCC", 0xEF, 0xBB, 0xBF) ) {
    $txt = substr($txt, 3);
}
$BOM = substr($txt, 0, 3);

/* "Double Quotes" are important */
if ( $BOM == "\xEF\xBB\xBF" ) {
    $txt = substr($txt, 3);
}