ホームページ > php教程 > php手册 > PHP str_replace の置換の脆弱性

PHP str_replace の置換の脆弱性

WBOY
リリース: 2016-06-13 12:30:19
オリジナル
1143 人が閲覧しました

定義と使用法
str_replace() 関数は、文字列を使用して文字列内の他の文字を置き換えます。

構文
str_replace(find,replace,string,count)

パラメータ 説明
find 必須。検索する値を指定します。
交換が必要です。 find の値を置き換える値を指定します。
文字列が必要です。検索する文字列を指定します。
カウントはオプションです。置換の数をカウントする変数。

ヒントとメモ
注: この関数では大文字と小文字が区別されます。大文字と小文字を区別しない検索を実行するには、str_ireplace() を使用してください。

注: この関数はバイナリ セーフです。

例 1

コードをコピーします コードは次のとおりです:


< ;?php
echo str_replace("world","John","Hello world!");
?>


出力:

こんにちは、ジョン!

例 2
この例では、配列とカウント変数を使用した str_replace() 関数を示します。

コードをコピー コードは次のとおりです。


$arr = array("blue","re​​d","green"," yellow");
print_r( str_replace("red","pink",$arr,$i));
echo "置換:
?> 出力:
配列

(
[0] => 青
[1] => ピンク
[2] => 緑
[3] => 黄
)
置換: 1


例 3


コードをコピー

コードは次のとおりです。 $find = array("Hello","world");

$replace = array("B");
$arr = array( "Hello","world", "!");
print_r(str_replace($find,$replace,$arr));


出力:

配列

(
[0] => B
[1] =>

$arr1 = Array(
'http ://img.jb51.net/img/offer/29/24/70/20/29247020'、
'http://img.jb51.net/img/offer/29/24/70/20/ 29247020-1',
'http://img.jb51.net/img/offer/29/24/ 70/20/29247020-2'
$arr2 = Array( <🎜); >'http://localhost/root/ups/af48056fc4.jpg'、
'http://localhost/root/ups/cf33240aa3.jpg'、
'http://localhost/root/ups/ c30e40419b.jpg'
);
$data = '

://img.jb51.net/img/offer/29/24/70/20/29247020-2"/> ;';
$data = str_replace($arr1,$arr2,$data);
var_dump($data);
?>

置換後の結果は次のとおりです:


string(169) ""str_replace 関数の宣言はおそらく次のようになります: str_replace($search, $ replace, $input[,&$count])。たとえば、文字列 $ を置換する場合input はソース文字列 (データ ソースと呼ばれます) であり、str_pos、strtok、str_repeat およびその他の関数はすべて最初の位置にデータ ソースを配置するため、これは不合理です。配列内の対応する文字列を置き換えるのではなく、配列内の最初の文字列を置き換えます。その後、重複する文字列の後に同一の文字列がマージされます。

解決策:
function strrplace($arr1,$arr2,$data){
if(is_array($arr1)) {
foreach($arr1 as $key => $ value) {
$data = str_replace_once($value, $arr2[$key], $data);
} }
return $data;
}
function str_replace_once($needle , $replace, $data) //初回置換
{
$pos = strpos($data, $needle);
if ($pos === false) {
return $ data ;
}
return substr_replace($data, $replace, $pos, strlen($needle));
}

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート