ホームページ  >  記事  >  バックエンド開発  >  PHP で指定された文字列コードをインターセプトしようとしています

PHP で指定された文字列コードをインターセプトしようとしています

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

次の HTML 文字列があります:
de924088116361be65efe95982b23cf2aaaa0c6dc11e160d3b678d68754cc175188abbbb0c6dc11e160d3b678d68754cc175188acccc0c6dc11e160d3b678d68754cc175188adddd0c6dc11e160d3b678d68754cc175188a29f16cb74779e329f81fc7b3efabe51a 次の内容を出力したい場合:
de924088116361be65efe95982b23cf2aaaa0c6dc11e160d3b678d68754cc175188adddd0c6dc11e160d3b678d68754cc175188ab90dd5946f0946207856a8a37f441edfつまり、真ん中の 2 つを削除します。0c6dc11e160d3b678d68754cc175188a の前のコンテンツと 0c6dc11e160d3b678d68754cc175188a の単純なコードは HTML として出力する必要があるため、配列モードでは使用されません。

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

$s = '<td align="Center" rowspan="2" width="7%">aaaa<br>bbbb<br>cccc<br>dddd<br></td >';echo preg_replace('/<br>\w+/', '', $s, 2);
<td align="Center" rowspan="2" width="7%">aaaa<br>dddd<br></td >

単独で実行するのは問題ありませんが、上の式が実際に文字列で使用されると、2 番目の段落に br が含まれているためです。 ( ) 、、最後の段落 br に「-」が含まれており、インターセプトに問題があります。

$s = 'de924088116361be65efe95982b23cf2aaaa0c6dc11e160d3b678d68754cc175188a11(22)0c6dc11e160d3b678d68754cc175188acccc0c6dc11e160d3b678d68754cc175188add-dd0c6dc11e160d3b678d68754cc175188a35ddcab25c0cc1e062aaa92622833869';

インターセプトは次のようになります:
$s = 'de924088116361be65efe95982b23cf2aaaa(22)0c6dc11e160d3b678d68754cc175188acccc-dd< ;br> ;29f16cb74779e329f81fc7b3efabe51a';


$s = '<td align="Center" rowspan="2" width="7%">aaaa<br>11(22)<br>cccc<br>dd-dd<br></td >';echo preg_replace('/<br>[\(\)-\w]+/', '', $s, 2);

補足:aaaa、ccccは中国語です。

補足説明:aaaaとccccは中国語です。

りーさん


ありがとうございます。最初の段落はまだ間違っているので、元の文字を直接貼り付けた方がよいでしょう:

de924088116361be65efe95982b23cf2コンピュータ プログラミング0c6dc11e160d3b678d68754cc175188a1-9( 1 ,2)0c6dc11e160d3b678d68754cc175188aWang0c6dc11e160d3b678d68754cc175188a3-3070c6dc11e160d3b678d68754cc175188ab90dd5946f0946207856a8a37f441edf

2 つの効果を出力する場合:
1. 665523ecef6a51257f75cd94963f3f98コンピュータ プログラミング0c6dc11e160d3b678d68754cc175188a3-3070c6dc11e160d3b678d68754cc175188ab90dd5946f0946207856a8a37f441edf
2.de924088116361be65efe95982b23cf2コンピュータ プログラミング


1

$s = '<td align="Center" rowspan="2" width="7%">中文<br>11(22)<br>拼音<br>dd-dd<br></td >';echo preg_replace('/<br>[\x{4e00}-\x{9fa5}\w\(\)-]+/u', '', $s,2) ;//UTF-8编码


2

echo preg_replace('/<br>[^<]+/', '', $s, 2);


1

echo preg_replace('/\(.+?\)/', '', $s);


2

echo preg_replace('/<br>[^<]+/', '', $s, 2);


モデレーター、ありがとうございます。最初のは正しいです。2 番目の「Wang0c6dc11e160d3b678d68754cc175188a はまだ存在します。

echo preg_replace('/\(.+?\)/', '', $s);

数が多すぎます。[ ] の中にカンマを追加してください


echo preg_replace('/<br>[\x{4e00}-\x{9fa5}\w\(\)\-,]+/u', '', $s,2) ;//UTF-8编码

jordan102 さん、2 番目の echo preg_replace('/(.+?)/', '', $s) も「Wang0c6dc11e160d3b678d68754cc175188a」の部分を切り取る必要がありますので、よろしくお願いします。文中の動作は問題ありませんが、文の前に文やスペースがあると動作に問題があります

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