私は入力を解析するために作業しています。これはHTMLです。しかし、http://、https://、ftp://などのプロトコルを持たないhref属性やsrc属性をすべて見つけることができる必要があります。プロトコルとドメインを含む変数。だから、preg_replaceプロトコルが見つからない場合にのみhrefまたはsrc
例えば、私は
<a href="/_mylink/goes/here">Link 1</a>
<a href="http://site.com/_myotherlink/goes/here">Link 2</a>
を返すようにしたい:
<a href="http://mydomain.com/_mylink/goes/here">Link 1</a>
<a href="http://site.com/_myotherlink/goes/here">Link 2</a>
私は全体のhref属性を取得することができますが、私は場合にのみ、一致と交換する方法を動作するように見えることはできませんそれはプロトコルがありません。私が発見した[^ 0-9] /逆ではない方法で動作しますが、私は私がhttpでそれをしようとしたとき、それは仕事を得ることができなかったでしょう://など
編集:
だけそれについて言及するには、それがこの質問の「範囲」の一部であることが明らかになったので、私は{}のようなものをこれらのいくつかに使用するので、置換の結果としてURLエンコーディングを避けたい、私はそれらに%7B%7Dのようなものを持たせたくありません。
代わりに$ doc-> getElementsByTagName( "a")を使用し、strpos()を使用して "/"で始まるhrefをフィルタリングする類似のソリューションを作成しました。私はあなたのソリューションがxpathと一緒にこれらのタスクの両方をどのように行うのが好きです。 +1、いいね。 – IsisCode
これは問題を引き起こします。自動的にurlencode()の属性が表示されているように見えますが、これはコードのその時点で回避しようとしている機能です。それをオフにする方法はありますか? –
@ScottFlackこれはおそらく 'saveHTML()'のためです。代わりに 'saveXML()'を試してください。また、PHPの – Phil