php
  • domdocument
  • setattribute
  • 2016-05-11 4 views 1 likes 
    1

    このような:DOMDocument要素の属性を特殊文字で設定する方法は? HTMLブロックで

    <p>Hello: <img src="hello/foo.png" /></p> 
    

    私はLaravel storage_pathリンクに画像のURL srcを変換する必要があります。私はそうのようなURLを変換するためにPHPのDOMDocumentを使用しています:

    $link = $a->getAttribute('src'); 
    $pat = '#(\w+\.\w+)+(?!.*(\w+)(\.\w+)+)#'; 
    $matches = []; 
    preg_match($pat, $link, $matches); 
    $newStr = "{{ storage_path('app/' . " . $matches[0] . ") }}"; 
    $a->setAttribute('src', $newStr); 
    

    問題は出力がsrc="%7B%7B%20storage_path('app/'%20.%20foo.png)%20%7D%7D"

    どのように私はsrc属性の特殊文字を保つことができるということですか?

    +0

    urldecode()は、あなたがしようとしている使用する必要がありますこの答えも閉じますか? –

    +0

    @PedroLobitoあなたが質問を意味する答えであれば、はい、誰かが答える前に重複を見つけたらそれは期待できませんか? – greener

    +0

    URLエンコードのようです。私はDOMDocumentがこれを行うと驚くでしょう。 'src'にURLをエンコードする必要があると判断するものがありますか? – Halcyon

    答えて

    1

    次のようなものを使用することができます。

    $html = '<p>Hello: <img src="hello/foo.png" /></p>'; 
    $dom = new DOMDocument(); 
    $dom->loadHTML($html); 
    $img = $dom->getElementsByTagName('img'); 
    $img->item(0)->setAttribute('src', '{{ storage_path(\'app/\' . foo.png) }}'); 
    #loadHTML causes a !DOCTYPE tag to be added, so remove it: 
    $dom->removeChild($dom->firstChild); 
    #it also wraps the code in <html><body></body></html>, so remove that: 
    $dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild); 
    $newImage = urldecode($dom->saveHTML()); 
    //<p>Hello: <img src="{{ storage_path('app/' . foo.png) }}"></p> 
    

    注:出力するために imgsrcあなたが望むように、あなたが

    +0

    残念ながら、私はLaravelストレージフォルダ(https://laravel.com/docs/5.1/helpers#method-storage-path)を指すようにURLを書き直す必要があるため、できません。 – greener

    +0

    更新された回答を確認してください。 –

    関連する問題