查询一个php函数

时间:2012-09-20 16:47:32

标签: 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_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;
}

?>

2 个答案:

答案 0 :(得分:3)

简而言之,它看起来像是一种解析字符串的方式 - 非常低效和脆弱,我想说。

$ar0 = explode($marqueurDebutLien, $text);

此行将使用$marqueurDebutLien字符串作为分隔符,将存储在$ text中的字符串分解('爆炸')到子字符串数组中。然后它接受这个数组的第二个元素(即$marqueurDebutLien之后的内容)并再次打破它:

$ar1 = explode($marqueurFinLien, $ar0[1]);

...现在使用$marqueurFinLien作为分隔符。

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

为什么效率低下,你可能会问?实际上有几件小事情可以很容易地改进:explode的限制,因此只处理一小部分,立即返回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作为错误的标志)如果没有开放分隔符或者如果它不是然后关闭分隔符。

答案 1 :(得分:1)

该函数似乎在输入$marqueurDebutLien的{​​{1}}和$marqueurFinLien字符串之间返回文字。

e.g。

$text