目次
ディスカッションへの返信 (解決策)

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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

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

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles