0

src="/blkjad.dafsdf"> という形式の文字列に一致する正規表現があります。次のようになります: (src|href)(\s*)?=(\s*)?(\"|\')/([^/].*?)\4.

これは、私が実行している 1 つのサイトでは問題なく動作しますが、Cake に組み込まれている別のサイトでは一貫して失敗します。別の失敗した Regex => '/(")/' は、行内の二重引用符に一致する必要があります。

私は今途方に暮れています。私が働いている上級開発者の 1 人がそれを見て、基本的に首を横に振った。残念ながら、私は Cake にそれほど精通しておらず、同様の問題をオンラインで見つけることができないようです。何か案は?

編集: レコードについては、失敗した正規表現は preg_match_all を使用しますが、他の (同一/動作する正規表現) は preg_replace を使用します。関連するコードを次に示します。

$regex['php'] = '/(src|href)(\s*)?=(\s*)?(\"|\')\/([^\/].*?)\4/';

$php = htmlspecialchars(file_get_contents(sprintf('/home/x/x/x/x/x/%s.%s', $string,    $extension)));                                                  echo $php;

 if (preg_match_all($regex['php'], $php, $out)){
    echo sizeof($out);
    echo nl2br(print_r($out, true));
 } else {
    echo 'Doesn\'t work';
 }
4

1 に答える 1

1

問題は htmlspecialchars() 呼び出しにあると思います。

PHPのドキュメントに記載されているように

実行される翻訳は次のとおりです。

  • '&' (アンパサンド) は '&' になります
  • '"' (二重引用符) は '"' になります
  • ENT_NOQUOTES が設定されていない場合。"'" (シングルクォート) は ''' のみになります
  • ENT_QUOTES が設定されている場合。'<' (より小さい) は '<' になります '>' (より大きい) は '>' になります
于 2011-09-19T15:53:04.540 に答える