ホームページ  >  記事  >  バックエンド開発  >  textarea グラフィック情報を背景に投稿しましたが、背景は画像配列を抽出できません。解決してください。 ? ? ?

textarea グラフィック情報を背景に投稿しましたが、背景は画像配列を抽出できません。解決してください。 ? ? ?

WBOY
WBOYオリジナル
2016-06-23 14:27:221185ブラウズ

写真抽出 http

ユーザーがテキストエリア内の写真を削除し、別の写真をアップロードするときに、サーバーのスペースを節約するために、kindeditor を使用してテキストエリアのオンライン編集ボックスを作成しました。 。元のデータベースにあるテキストエリアの画像を抽出して配列を形成し、配列内の各値を新しく渡されたテキストエリア in_array() と比較し、存在しない画像を削除しました。 。奇妙なことに、新しく渡された textarea から画像配列を抽出できず、抽出結果は空の配列になります。 。アドバイスをお願いします、ありがとうございます。 。

ディスカッションに返信(解決策)

ユーザーがテキストエリア内の画像を削除した場合
新しく渡されたテキストエリアから画像アドレスを抽出するにはどうすればよいですか?

正確には、ユーザーがテキストエリア内の特定の画像 (exp.jpg など) を削除し、それをバックグラウンドに送信すると、$_POST['textarea'] から抽出された画像配列の値が 1 つ減ります。それはexp.jpgです。 。このとき、元のデータベースのテキストエリアから抽出された画像配列と、バックグラウンドで受信した画像配列が比較されます。画像上の欠落しているパスは、フォアグラウンドでユーザーによって削除されたが、サーバー上では削除されていない画像です。 。 。
ユーザーが textarea 内の画像を削除したとき
新しく渡された textarea から画像アドレスを抽出するにはどうすればよいでしょうか?

問題は、いずれの場合も、バックグラウンドから受け取った $_POST['textarea'] から抽出された画像配列が空であることです。 。しかし、$_POST['textarea'] には確かに img 画像があります。 。奇妙なのは、データベースに保存して抽出すると正しいのですが、$_POST['textarea'] から直接抽出すると空にしかならないことです。 。
ユーザーが textarea 内の画像を削除したとき
新しく渡された textarea から画像アドレスを抽出するにはどうすればよいでしょうか?

どのように抽出したかを知る必要があります
$_POST['textarea'] の内容も知る必要があります

フロントエンドの textarea の内容:

<p><span style="line-height:1.5;"><img src="/info/201311/1384551494771680415.jpg" data-ke-src="/info/201311/1384551494771680415.jpg" alt=""><br></span></p><p><span style="line-height:1.5;">爱微淘是一</span><span style="line-height:1.5;">家专业从事移动应用开发、微信api开发的技术团队。</span> </p>

バックグラウンドの受信と処理:
$content = isset($_POST['content']) ? $_POST['content']: false ;$pic_now = get_pic_html($content);     //现在的图片数组print_r($pic_now);   // always empty /* * 从html中提取图片整合到数组 @ param string $str @ return array*/function get_pic_html($str){   $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.png|\.jpg]))[\'|\"].*?[\/]?>/";    // 正则式   preg_match_all($pattern,$str,$match);     return $match[1];    // 返回只带有图片路径的一维数组}

も必要ですどのように抽出したかを知るため
$_POST['textarea'] の内容も知る必要があります

$s =<<< HTML<p><span style="line-height:1.5;"><img src="/info/201311/1384551494771680415.jpg" data-ke-src="/info/201311/1384551494771680415.jpg" alt=""><br></span></p><p><span style="line-height:1.5;">爱微淘是一</span><span style="line-height:1.5;">家专业从事移动应用开发、微信api开发的技术团队。</span> </p>HTML;function get_pic_html($str){   $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.png|\.jpg]))[\'|\"].*?[\/]?>/";    // 正则式   preg_match_all($pattern,$str,$match);     return $match[1];    // 返回只带有图片路径的一维数组}print_r(get_pic_html($s));
Array
(
] [0] => /info/201311/1384551494771680415.jpg
)
大きな問題はありませんコードを使用してください

ただし、結果を確認するには、echobase64_encode( $_POST['textarea']); が必要です

バックグラウンドで直接印刷した後、php が img div span などの二重引用符でタグを自動的にエスケープすることがわかりました。が掲載されていました。 。
そのため、画像タグは 6e6758af54d2593fe9d4585236792a14 となるため、正規表現を検証できません。 。
投稿されたデータに対してstripslashes()を使用してバックスラッシュを削除すればOKです。 。
奇妙なことに、データベースに書き込まれるテキストエリアにはバックスラッシュがありません。 。

$s =<<< HTML<p><span style="line-height:1.5;"><img src="/info/201311/1384551494771680415.jpg" data-ke-src="/info/201311/1384551494771680415.jpg" alt=""><br></span></p><p><span style="line-height:1.5;">爱微淘是一</span><span style="line-height:1.5;">家专业从事移动应用开发、微信api开发的技术团队。</span> </p>HTML;function get_pic_html($str){   $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.png|\.jpg]))[\'|\"].*?[\/]?>/";    // 正则式   preg_match_all($pattern,$str,$match);     return $match[1];    // 返回只带有图片路径的一维数组}print_r(get_pic_html($s));
Array
(
[0] => /info/201311/1384551494771680415.jpg
)
コードに大きな問題はありません

ただし、結果は echobase64_encode($_POST['textarea'] ); が必要です。確認してください

エスケープは保存の便宜のためであり、エスケープ文字はデータベースに保持されません

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。