0 レビュー
1 回答
PHPでユーザーが挿入した画像タグを削除する
自分の画像アイコンを許可しながら、ユーザーが挿入した画像タグを削除しようとしています。私はこれを持っています
$post = 'Here is an image <img src="imgage.jpg" /> to check
and my icon <img src="/images/ImageLink.jpg" />';
$imgcheck = true;
$stringstart = 0;
while($imgcheck == 'true'){
if($stringstart = strpos($post,'<img',$stringstart)){
if ($stringend = strpos($post,'>',$stringstart)){
$strlength = $stringend - $stringstart;
$substring = substr($post,$stringstart,$strlength);
if (!preg_match('/src="\/images\/ImageLink.jpg"/',$substring)){
$post = str_replace($substring, "", $post);
}
else{
$stringstart = $stringend;
}
}
else{
$imgcheck = 'false';
}
}
else{
$imgcheck = 'false';
}
}
これを返却したい
Here is an image to check and my icon <img src="/images/ImageLink.jpg" />
strpos関数の1つでエラーが発生しているようですが、理由がわかりません。
更新:ありがとうございます。その答えははるかにエレガントです。私はついにコードを動作させました
$imgcheck = true;
$stringstart = 0;
while($imgcheck == 'true'){
if($stringstart = strpos($post,'<img',$stringstart)){
if ($stringend = strpos($post,'>',$stringstart)){
$strlength = $stringend - $stringstart +4;
$substring = substr($post,$stringstart,$strlength);
if (!preg_match('~src="\/images\/ImageLink.jpg"~',$substring)){
$post = str_replace($substring, "", $post);
}
else{
$stringstart = $stringend;
}
}
else{
$imgcheck = 'false';
}
}
else{
$imgcheck = 'false';
}
}
with <
と>
を使用しているのは、ユーザー入力にcontenteditable=trueのdivを使用しているためです。これは、 <
と>
を<img<に置き換えるだけで、テキスト領域に使用することもできます。 /code>と
>
、および変更
$strlength = $stringend - $stringstart +4;
から
$strlength = $stringend - $stringstart +1;
お時間をいただきありがとうございます。
わからない
0
レビュー
答え :
解決策:
ジョブにはHTMLパーサーを使用する必要があります(例: DOMDocument
)。
次のサンプルコードは、htmlフラグメントをID post
のdivに入れて、識別できるようにします。
$ post='ここに確認する画像 があります
と私のアイコン ';
$ post =''。$post。'';
次に、 DOMDocument
が作成され、HTMLがロードされます。さらに、コンテナdivは、そのidによって変数として使用可能になります:
$ doc = new DOMDocument();
$ doc-> loadHTML($ post);
$container = $ doc-> getElementById('post');
次のステップは、削除するすべての画像を選択することです。これはxpathで行われます。次に、xpatch式は、参照として $container
を使用して照会されます:
$ xpath = new DOMXPath($ doc);
$ expression ='.//img[@src!= "/images/ImageLink.jpg"]';
$ nodes = $ xpath-> query($ expression、$container);
次のステップは、見つかったすべての要素を繰り返し処理して削除することです。
foreach($nodes as $node)
{
$parent = $node->parentNode;
$parent->removeChild($node);
}
最後に、変更されたHTMLは、 $container
からすべてを取り出して取得する必要があります:
$ innerHTML ='';
foreach($container-> childNodes as $ child){
$innerHTML。=$node-> ownerDocument-> saveXML($ child);
}
これですべてが完了しました
echo $innerHTML;
これにより、次のことが可能になります:
Here is an image to check
and my icon <img src="/images/ImageLink.jpg"/>
これがお役に立てば幸いです。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。