我正在尝试使用其他方法过滤网址后删除非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);
返回的错误是
Failed evaluating code: \nsprintf("_-%2.2x", ord(~))
它打破了其他例子,我无法弄清楚原因。有人能指出我正确的方向吗?
答案 0 :(得分:3)
由于变量插值导致$1
已经填满,因此您尝试拨打ord(~)
而不是ord("~")
。使用"$1"
代替$1
。
$query = preg_replace('/([^a-zA-Z0-9._-])/e', 'sprintf("_-%2.2x", ord("$1"))', $query);
答案 1 :(得分:2)
线索是ord(~)
。应引用传递给ord
的文字。
答案 2 :(得分:1)
应为'sprintf("_-%2.2x", ord("$1"))'
,注意$1
附近的双引号。