如果这个问题看起来太便宜,请原谅我。
我有这一行:
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;
答案 0 :(得分:0)
您的正则表达式将不匹配两位数后跟一个空格和更多数字
如果您愿意,可以将[ND]?
更改为[\sND]?
,但如果字符串不是全部数字,也会允许空格。
如果您需要有关正则表达式的进一步建议,则需要准确指定规则。
答案 1 :(得分:0)
在这种情况下,正则表达式是一种矫枉过正。
返回一个字符串,其中除
-_.
之外的所有非字母数字字符 已被替换为百分比(%
)符号后跟两个十六进制数字 和空格编码为加号(+
)符号。它的编码方式与之相同 来自WWW表单的发布数据被编码,其方式与中的相同 application / x-www-form-urlencoded媒体类型。这与» RFC 3986编码(请参阅rawurlencode()
)的不同之处在于,由于历史原因, 空格编码为加号(+
)符号。
它明确指出,如果您希望将空格编码为%20
而不是+
,则应使用rawurlencode()
。
代码示例:
$strings = array(
'36 2543541284',
'1234 5678',
'this is a string'
);
$strings_encoded = array();
foreach($strings as $string)
{
$strings_encoded[] = rawurlencode($string);
}
var_dump($strings_encoded);
<强>输出:强>
array(3) {
[0]=>
string(15) "36%202543541284"
[1]=>
string(11) "1234%205678"
[2]=>
string(22) "this%20is%20a%20string"
}