Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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 sprintf函数未计算_Php_Regex_Preg Replace_Printf - Fatal编程技术网

Php sprintf函数未计算

Php sprintf函数未计算,php,regex,preg-replace,printf,Php,Regex,Preg Replace,Printf,我尝试在用其他方法过滤URL后删除非RFC字符。此方法会中断: $query = 'www.example.com_-.su_-.1Mk8ij_-.www.cs.cmu.edu_-.~mjw_-.recipes_-.cheese_-.cheese-garlic-biscuits.html'; $query = preg_replace('/([^a-zA-Z0-9._-])/e', 'sprintf("_-%2.2x", ord($1))', $query); 返回的错误是 评估代码失败:\

我尝试在用其他方法过滤URL后删除非RFC字符。此方法会中断:

$query = 'www.example.com_-.su_-.1Mk8ij_-.www.cs.cmu.edu_-.~mjw_-.recipes_-.cheese_-.cheese-garlic-biscuits.html';

$query = preg_replace('/([^a-zA-Z0-9._-])/e', 'sprintf("_-%2.2x", ord($1))', $query);
返回的错误是

评估代码失败:\nsprintf(“\u-%2.2x”,ord(~)


它也打断了其他例子,我不明白为什么。有人能给我指出正确的方向吗?

因为变量插值已经填充了
$1
,因此您试图调用
ord(~)
而不是
ord(“~”
)。使用
“$1”
而不是
$1

$query = preg_replace('/([^a-zA-Z0-9._-])/e', 'sprintf("_-%2.2x", ord("$1"))', $query);

由于变量插值,
$1
已经被填充,因此您试图调用
ord(~)
而不是
ord(“~”
)。使用
“$1”
而不是
$1

$query = preg_replace('/([^a-zA-Z0-9._-])/e', 'sprintf("_-%2.2x", ord("$1"))', $query);

线索是单词(~)。传递给
ord
的文本应该被引用。

线索是
ord(~)
。传递给
ord
的文本应该被引用。

它应该是
'sprintf(“-%2.2x”,ord($1”)”
,注意
$1
周围的双引号应该是
'sprintf(“-%2.2x”,ord($1”)
,注意
$1
周围的双引号,如果
$1
包含
?这就是
/e
的弱点。哇,即使在那时它仍然有效:(PHP的丑陋从未停止让我惊讶。)感谢所有这些!对于Qtax…很高兴知道它需要引用,如果
$1
包含一个
?这就是
/e
的弱点。哇,它甚至可以工作:(PHP的丑陋从未停止让我惊讶。)感谢所有这些!对于Qtax…很高兴知道它需要引用
$query = preg_replace('/([^a-zA-Z0-9._-])/e', 'sprintf("_-%2.2x", ord("$1"))', $query);