substr_replace 置換の問題
Jun 20, 2016 pm 12:30 PM ウェブサイトの記事に表示されるキーワードへのリンクを自動的に追加し、キーワードが複数回表示される場合は 1 回だけ置換する小さなプログラムを作成しました。コードは次のとおりです。 strpos() と substr_replace を使用します。
function keywords_autolink($content) { $keywords=array( '企业管理书籍' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '企业管理' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '管理学书籍' => '<a target="_blank" title="管理学书籍" href="http://www.12reads.cn/">管理学书籍</a>', '管理书籍' => '<a target="_blank" title="管理书籍" href="http://www.12reads.cn/">管理书籍</a>', '管理类书籍' => '<a target="_blank" title="管理类书籍" href="http://www.12reads.cn/">管理类书籍</a>', '市场营销' => '<a target="_blank" title="市场营销" href="http://www.12reads.cn/category/marketing">市场营销</a>', '职场' => '<a target="_blank" title="职场" href="http://www.12reads.cn/category/career">职场</a>' ); $keys=array_keys($keywords); foreach ($keys as $k) { $pos=strpos($content, $k); if ($pos !== false) { // Nothing found $length=strlen($k); $content=substr_replace($content, $keywords[$k], $pos, $length); //$content是文章内容,$keywords[$k]需要替换成的内容,$pos替换开始的位置,$length数出要从开始的位置算起要替换的词有多长。 unset($k);//最后销毁一下哦。 } } return $content; }add_filter('the_content', 'keywords_autolink');
ログイン後にコピー
しかし、今の問題は、置き換える必要がある 2 つの単語が同時に現れると、物事が混乱してしまうことです。たとえば、経営学の本と経営管理が、同時に、つまり「経営管理『経営管理』を読む」とすると、このときの置換結果は次のようになります。
<a href="http://www.12reads.cn/" title="<a target='_blank' title='企业管理' href='http://www.12reads.cn/'>企业管理</a>书籍" target="_blank">企业管理书籍</a>
ログイン後にコピー
この問題を解決するにはどうすればよいですか?並べ替え方法は知っているかもしれませんが、よくわかりません。先輩方にアドバイスをいただければ幸いです。
ディスカッションへの返信 (解決策)
function keywords_autolink($content) { $keywords=array( '企业管理书籍' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '企业管理' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '管理学书籍' => '<a target="_blank" title="管理学书籍" href="http://www.12reads.cn/">管理学书籍</a>', '管理书籍' => '<a target="_blank" title="管理书籍" href="http://www.12reads.cn/">管理书籍</a>', '管理类书籍' => '<a target="_blank" title="管理类书籍" href="http://www.12reads.cn/">管理类书籍</a>', '市场营销' => '<a target="_blank" title="市场营销" href="http://www.12reads.cn/category/marketing">市场营销</a>', '职场' => '<a target="_blank" title="职场" href="http://www.12reads.cn/category/career">职场</a>' ); /* $keys=array_keys($keywords); foreach ($keys as $k) { $pos=strpos($content, $k); if ($pos !== false) { // Nothing found $length=strlen($k); $content=substr_replace($content, $keywords[$k], $pos, $length); //$content是文章内容,$keywords[$k]需要替换成的内容,$pos替换开始的位置,$length数出要从开始的位置算起要替换的词有多长。 unset($k);//最后销毁一下哦。 } } */ $keys = array_keys($keywords); $tmpReplace = []; foreach($keys as $k=>$v){ $tmpReplace[] = $tmp = '['.$k.']'; } $content = str_replace($keys,$tmpReplace,$content); $content = str_replace($tmpReplace,array_values($keywords),$content); return $content; }echo keywords_autolink('企业管理书籍哈哈企业管理呵呵企业管理');
ログイン後にコピー
ログイン後にコピー
function keywords_autolink($content) { $keywords=array( '企业管理书籍' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '企业管理' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '管理学书籍' => '<a target="_blank" title="管理学书籍" href="http://www.12reads.cn/">管理学书籍</a>', '管理书籍' => '<a target="_blank" title="管理书籍" href="http://www.12reads.cn/">管理书籍</a>', '管理类书籍' => '<a target="_blank" title="管理类书籍" href="http://www.12reads.cn/">管理类书籍</a>', '市场营销' => '<a target="_blank" title="市场营销" href="http://www.12reads.cn/category/marketing">市场营销</a>', '职场' => '<a target="_blank" title="职场" href="http://www.12reads.cn/category/career">职场</a>' ); /* $keys=array_keys($keywords); foreach ($keys as $k) { $pos=strpos($content, $k); if ($pos !== false) { // Nothing found $length=strlen($k); $content=substr_replace($content, $keywords[$k], $pos, $length); //$content是文章内容,$keywords[$k]需要替换成的内容,$pos替换开始的位置,$length数出要从开始的位置算起要替换的词有多长。 unset($k);//最后销毁一下哦。 } } */ $keys = array_keys($keywords); $tmpReplace = []; foreach($keys as $k=>$v){ $tmpReplace[] = $tmp = '['.$k.']'; } $content = str_replace($keys,$tmpReplace,$content); $content = str_replace($tmpReplace,array_values($keywords),$content); return $content; }echo keywords_autolink('企业管理书籍哈哈企业管理呵呵企业管理');
ログイン後にコピー
ログイン後にコピー
ありがとうございます。これでは動作しません。何度か交換します。
function keywords_autolink($content) { $keywords=array( '企业管理书籍' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '企业管理' => '<a target="_blank" title="企业管理书籍" href="http://www.12reads.cn/">企业管理书籍</a>', '管理学书籍' => '<a target="_blank" title="管理学书籍" href="http://www.12reads.cn/">管理学书籍</a>', '管理书籍' => '<a target="_blank" title="管理书籍" href="http://www.12reads.cn/">管理书籍</a>', '管理类书籍' => '<a target="_blank" title="管理类书籍" href="http://www.12reads.cn/">管理类书籍</a>', '市场营销' => '<a target="_blank" title="市场营销" href="http://www.12reads.cn/category/marketing">市场营销</a>', '职场' => '<a target="_blank" title="职场" href="http://www.12reads.cn/category/career">职场</a>' ); /* $keys=array_keys($keywords); foreach ($keys as $k) { $pos=strpos($content, $k); if ($pos !== false) { // Nothing found $length=strlen($k); $content=substr_replace($content, $keywords[$k], $pos, $length); //$content是文章内容,$keywords[$k]需要替换成的内容,$pos替换开始的位置,$length数出要从开始的位置算起要替换的词有多长。 unset($k);//最后销毁一下哦。 } } */ $keys = array_keys($keywords); $tmpReplace = []; foreach($keys as $k=>$v){ $tmpReplace[] = $tmp = '['.$k.']'; $tmpfind = '/'.$v.'/'; $content = preg_replace($tmpfind,$tmp,$content,1); } $content = str_replace($tmpReplace,array_values($keywords),$content); return $content; }echo keywords_autolink('企业管理书籍哈哈企业管理呵呵企业管理');
ログイン後にコピー
ありがとうございます、上記は一度差し替えていますが、経営管理書は複数回差し替えており、経営管理は差し替えていません。
$keywords を見てみましょう
最初の「経営管理書」を「つながりのある経営管理書」に置き換えます
最初の「経営管理」も「つながりのある経営管理書」に置き換えます接続」
2 つの「経営管理書」が置き換えられていません
何が間違っています
$キーワードを見てください
最初の「経営管理書」を「ビジネス」に置き換えてくださいつながりのある経営本」
最初の「経営学」も「つながりのある経営学」に置き換えられました
二番目の「経営学」は置き換えられていません
どうしたの
読み間違えました、コードは正常です、ありがとう、この投稿は閉じられました、もう一度見てもらえますか http://bbs.csdn.net/topics/391942890
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

人気の記事
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
1週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌

人気の記事
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
1週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7286
9


Java チュートリアル
1622
14


CakePHP チュートリアル
1342
46


Laravel チュートリアル
1259
25


PHP チュートリアル
1206
29



LaravelのバックエンドでReactアプリを構築する:パート2、React
