Php sprintf函数未计算
我尝试在用其他方法过滤URL后删除非RFC字符。此方法会中断: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); 返回的错误是 评估代码失败:\
$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);