如果这个问题显得太廉价,请原谅我。
我有这条线:
preg_match_all($pattern, $_GET['id'], $arr);
当您在搜索期间传递带有空格的值时,一旦遇到空格,该值就会中断。
例如:
36 2543541284
请注意 6 和 2 之间的空格。在与此类似的情况下,仅显示 36。
空格后的数字提示将被忽略。这是给用户“找不到数据”的消息。
我尝试使用 urlencode 添加 20% 但没有运气。
preg_match_all($pattern, rawurlencode($_GET[id]), $arr);
我也尝试过 urlencode 但无济于事。
我可能做错了什么?
function format($matches)
{
return $matches[1][0].(strlen($matches[2][0])>0?$matches[2][0]:" ").$matches[3][0].(strlen($matches[4][0])>0?" ".$matches[4][0]:"");
}
// CONSTRUCT A REGULAR EXPRESSION
$pattern
= '/' // regex delimiter
. '(' // START of a capture group
. '\d{2}' // exactly two digits
. ')' // END of capture group
. '(' // START SECOND capture group
. '[ND]?' // letters "D" OR "N" in any order or number - This is optional
. ')' // END SECOND capture group
. '(' // START THIRD capture group
. '\d*' // any number of digits
. ')' // END THIRD capture group
. '(' // START FOURTH capture group
. 'GG' // the letters "GG" EXACTLY
. '[\d]*' // any number of digits
. ')' // END THIRD capture group
. '?' // make the LAST capture group OPTIONAL
. '/' // regex delimiter
;
preg_match_all($pattern, rawurlencode($_GET[id]), $arr);
// REFORMAT the array
$str = format($arr);
// show what we did to the data
echo '<pre>' . PHP_EOL;
echo '1...5...10...15...20...' . PHP_EOL;
echo $pattern;
echo PHP_EOL;
//Are we getting what we asked for? This is a test. We will comment out all 6 lines if we are happy with output of our REFORMATTING.
echo $str;
echo PHP_EOL;