如您所见,我有以下函数,它用模式替换字符串中的某些字符,但它仅在我将模式作为字符串输入时才有效,就像在第一个注释掉的行中一样。我在那里放了一个回声来测试什么回来了,它应该是这样,所以我不知道发生了什么!有没有人有任何线索?
private function check_string( $s )
{
//return preg_replace( '/[^a-z 0-9~%\.:_\\-()"]/i', '', $s );
// a-z 0-9~%\.:_\\-()"
echo $this->permitted_uri_chars;
// /[^a-z 0-9~%\.:_\\-()"]/i
$pattern = '/[^'. $this->permitted_uri_chars .']/i';
return preg_replace( $pattern, '', $s );
}
我得到的错误是
Message: preg_replace(): Compilation failed: range out of order in character class at offset 18
回答
感谢杰森麦克里
$pattern = '/[^'. preg_quote($this->config->item('permitted_uri_chars'), '/') .']+/i';