ご覧のとおり、文字列内の特定の文字をパターンに置き換える次の関数がありますが、最初のコメント付きの行のように、パターンを文字列として入力した場合にのみ機能します。そこにエコーを入れて、何が戻ってくるのか、そしてそれがどうあるべきかをテストするので、何が起こっているのかわかりません!誰か手がかりはありますか?
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
答え
JasonMcCrearyに感謝します
$pattern = '/[^'. preg_quote($this->config->item('permitted_uri_chars'), '/') .']+/i';