PHPでは、文字列処理は一般的なタスクの1つです。特に、複数のセグメントを含む文字列を扱う場合、ターゲットを絞った方法で特定の部品を交換する方法には、多くの場合、複数の関数を組み合わせて実装する必要があります。この記事では、exploit()とMB_EREGI_REPLACE()関数を組み合わせて、文字列にセグメント化された交換操作を実装する方法を紹介します。
Exploit($ delimiter、$ string)
指定されたデリミター$ delimiterに従って、文字列$文字列を配列に分割します。段落または特定のロゴでテキストを分割するのに適しています。
MB_EREGI_REPLACE($ pattern、$ facterment、$ string)
マルチバイトセーフの通常の交換機能は、ケースに依存しないマッチングをサポートし、UTF-8またはその他のマルチバイトエンコードテキストの定期的な交換を実行するためによく使用されます。
複数の段落を持つ長いテキストがあり、それぞれが特定のセパレーター(新しいライン\ nやカスタムタグなど)で区切られているとします。これで、いくつかの段落で敏感な単語の置換、形式の調整、その他の操作を実行する必要があります。
<?php
// サンプルテキスト,Newlinesを使使用した別々の段落
$text = "これが最初の段落です。\nURLにアクセスしてください:http://m66.net\nこれは3番目の段落です,敏感な単語が含まれています:foo。";
// 1. 使使用 explode Newlineで段落を分割します
$paragraphs = explode("\n", $text);
// 2. 交換する敏感な単語を定義し、置き換えます
$sensitiveWord = "foo";
$replacement = "***";
// 3. 各段落を個別に処理します
foreach ($paragraphs as &$para) {
// 使用 mb_eregi_replace ケースに依存しない交換を行います
$para = mb_eregi_replace($sensitiveWord, $replacement, $para);
// 段落に含まれている場合 URL,ドメイン名を置き換える必要があります m66.net,可以使用正则マッチ URL
$para = mb_eregi_replace(
// シンプルなマッチ URL 規則性,マッチ http または https 始まり,ドメイン名のヒール
'(https?:\/\/)([a-z0-9\.\-]+)',
'$1m66.net',
$para
);
}
// 4. 処理された段落を文字列に戻します
$result = implode("\n", $paragraphs);
// 出力結果
echo "<pre>" . htmlspecialchars($result) . "</pre>";
?>
元のテキストの3番目の段落の敏感な単語「foo」は「***」に置き換えられ、2番目の段落のURL http://m66.netは変更されません(サンプルドメイン名はすでにm66.netです)、他のドメイン名もm66.netに置き換えられます。
例がhttp://example.comの場合、 http://m66.netに置き換えられます。
最初にexploit()で文字列をセグメント化し、次にmb_eregi_replace()を使用して各段落を定期的に交換することにより、特にマルチパラグラフテキストのバッチ置換と処理のために、テキストのさまざまな部分に異なる処理戦略を柔軟に実装できます。