关于一个php函数的查询

关于一个php函数的查询,php,Php,这个函数意味着什么 function entre2v2($text,$marqueurDebutLien,$marqueurFinLien) { $ar0=explode($marqueurDebutLien, $text); $ar1=explode($marqueurFinLien, $ar0[1]); $ar=trim($ar1[0]); return $ar; } 在上述代码中,$text指的是文本文件内容,该内容由以下代码从表单帖子中获取: $text=file_get_cont

这个函数意味着什么

function entre2v2($text,$marqueurDebutLien,$marqueurFinLien)

{

$ar0=explode($marqueurDebutLien, $text);
$ar1=explode($marqueurFinLien, $ar0[1]);
$ar=trim($ar1[0]);
return $ar;
}
在上述代码中,$text指的是文本文件内容,该内容由以下代码从表单帖子中获取:

$text=file_get_contents($_POST['file']);
有人能描述一下提到的php函数吗?我不明白这两个变量是什么意思

$marqueurFinLien
$marqueurDebutLien
根据第一个答案,我试过了。但它显示出错误

Warning: Missing argument 3 for entre2v2(), called in C:\xampp\htdocs\php\test.php on line 5 and defined in C:\xampp\htdocs\php\test.php on line 13

Notice: Undefined variable: marqueurFinLien in C:\xampp\htdocs\php\test.php on line 18

Notice: Undefined offset: 1 in C:\xampp\htdocs\php\test.php on line 18

Warning: explode() [function.explode]: Empty delimiter in C:\xampp\htdocs\php\test.php on line 18
当我使用以下命令时:

<?

$text=file_get_contents('http://localhost/php/w.txt');

$name=entre2v2($text,"DB_USER', ',');");


echo($name);
echo("<br>");



function entre2v2($text,$marqueurDebutLien,$marqueurFinLien)

{

$ar0=explode($marqueurDebutLien, $text);
$ar1=explode($marqueurFinLien, $ar0[1]);
$ar=trim($ar1[0]);
return $ar;
}

?>

该函数显示为从输入
$text
返回
$marqueurDebutLien
$marqueurFinLien
字符串之间的文本

e、 g


简言之,它看起来像是一种解析字符串的方法——我可以说,这是一种非常低效和脆弱的方法

$ar0 = explode($marqueurDebutLien, $text);
此行将使用
$marqueurDebutLien
字符串作为分隔符,将$text中存储的字符串拆分为子字符串数组。然后它获取该数组的第二个元素(即,
$marqueurDebutLien
)并再次将其打断:

$ar1 = explode($marqueurFinLien, $ar0[1]);
。。。现在使用
$marquerfinlien
作为分隔符

根据定义,此数组的第一个元素是位于
$marqueurDebutLien
$marqueurFinLien
之间的原始字符串(
$text
)中的第一个字符串。它的修剪版本是函数返回的

你可能会问,为什么效率低下?实际上,这里有几个小问题可以很容易地改进:对
explode
s的限制,因此只处理一小部分,立即返回
trim
的结果,而不是将其存储在某个变量中

但事实上,整个方法是有缺陷的。看看这个:

function notSoMysticEntre2v2($text, $openingDelimiter, $closingDelimiter) {
   $mark1 = strpos($text, $openingDelimiter);
   if ($mark1 === FALSE) { 
       return null; 
   }  
   $mark2 = strpos($text, $closingDelimiter, $mark1);
   if ($mark2 === FALSE) {
       return null;
   }
   $data  = substr($text, $mark1 + 1, $mark2 - $mark1 - 1);
   return trim($data);
}

请注意,此函数比第一个函数更简单:如果没有开头分隔符,或者后面没有结尾分隔符,它将无法正确解析字符串(返回
null
,作为错误标志)

$firstLinkMarker和$lastLinkMarker如果有帮助的话……我想指出这一行代码:
file\u get\u contents($\u POST['file'])通过向该web文件发送POST http请求并传入文件路径(例如,操作系统中的某些内容),可以很容易地利用此漏洞。记住孩子们:总是清理用户生成的输入,不要相信它<代码>($text,“DB_USER',',');”=>
($text,'DB_USER',',')。您在这里发送一个字符串,它需要两个分隔符。这两个函数是什么意思$marqueurFinLien$MarqueurDebutlien请参阅我对您的问题的原始评论。不过,它们的名字并不重要……它们可以被称为$BANAN和$badger,因为这会带来很大的不同。重要的是他们在做什么,我想说清楚。谢谢你让我说清楚。你能告诉我,这部分是什么意思$ar0=explode($marqueurDebutLien,$text)$ar1=爆炸($marquerfinlien,$ar0[1])$ar=修剪($ar1[0]);返回$ar;我是php的noob。我刚刚开始研究它。我知道这个答案需要很长时间才能写出,但当看到原始代码时,我还是忍不住写了出来。)当然,如果这些分隔符实际上只是字符,那么使用
strtok
就更容易(更快)。
function notSoMysticEntre2v2($text, $openingDelimiter, $closingDelimiter) {
   $mark1 = strpos($text, $openingDelimiter);
   if ($mark1 === FALSE) { 
       return null; 
   }  
   $mark2 = strpos($text, $closingDelimiter, $mark1);
   if ($mark2 === FALSE) {
       return null;
   }
   $data  = substr($text, $mark1 + 1, $mark2 - $mark1 - 1);
   return trim($data);
}