データベースクエリから文字列を受け取り、CSVファイルに入れる前に、すべてのHTMLタグ、改行、および改行を削除します。唯一のことは、私は削除する方法を見つけることができません文字列間の余分な空白です。
内部の空白文字を削除する最善の方法は何でしょうか?
データベースクエリから文字列を受け取り、CSVファイルに入れる前に、すべてのHTMLタグ、改行、および改行を削除します。唯一のことは、私は削除する方法を見つけることができません文字列間の余分な空白です。
内部の空白文字を削除する最善の方法は何でしょうか?
回答:
あなたが何を望んでいるか正確にはわかりませんが、ここに2つの状況があります:
あなただけの過剰を扱っている場合はwhitespace、文字列の先頭や末尾にあなたが使用することができtrim()
、ltrim()
またはrtrim()
それを削除します。
文字列内の余分なスペースを処理する場合は、1つのでpreg_replace
複数のwhitespaces " "*
を検討してwhitespace " "
ください。
例:
$foo = preg_replace('/\s+/', ' ', $foo);
$foo = preg_replace( '/\s+/', ' ', $foo );
と、次の効果がnl2br()
$str = str_replace(' ','',$str);
または、アンダースコア、 に置き換えます。などなど
Hi Earth
4とスペースの間でになるだろう:HiEarth
。これは質問に関連する問題を解決しません。
他の例はどれもうまくいかなかったので、これを使用しました:
trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))
これにより、すべてのタブ、改行、二重スペースなどが単純な1つのスペースに置き換えられます。
\s+
。それは2014年に戻ったので変更されている可能性がありますが、変更されている可能性があります。過去3年間PHPに触れていないため、コメントはできませんが、解決策である間は現在の回答を残し、場合によってはそれが続く可能性があります。
ユーザー入力[または他の信頼できないソース]からペイロードを取得する場合、preg_replace()の使用にはセキュリティ上の欠陥があります。PHPはeval()で正規表現を実行します。着信文字列が適切にサニタイズされていない場合、アプリケーションがコードインジェクションの危険にさらされます。
私のアプリケーションでは、入力のサニタイズを煩わせるのではなく(短い文字列のみを扱うため)、代わりに、プロセッサを集中的に使用する関数を作成しました。
function secureRip(string $str): string { /* Rips all whitespace securely. */
$arr = str_split($str, 1);
$retStr = '';
foreach ($arr as $char) {
$retStr .= trim($char);
}
return $retStr;
}
$str = preg_replace('/[\s]+/', ' ', $str);
以下を使用できます。
$str = trim(str_replace(" ", " ", $str));
これにより、文字列の両側から余分な空白が削除され、文字列内の2つのスペースが1つに変換されます。これは、連続する3つ以上のスペースを1つに変換しないことに注意してください!私が提案できる別の方法は、安全ですが完全に最適ではない爆破と爆破を使用することです!
$str = implode(" ", array_filter(explode(" ", $str)));
私の提案は、ネイティブのforループを使用するか、この種の仕事をするために正規表現を使用することです。
Sandipの答えを拡張するために、bit.lyで誤ってコーディングされたログに一連の文字列が表示されました。URLだけをコーディングするつもりでしたが、スペースの後にTwitterハンドルなどを配置しました。こんな感じ
? productID =26%20via%20@LFS
通常、それは問題にはなりませんが、SQLインジェクションが何度も試行されるので、有効なIDでないものはすべて404にリダイレクトします。preg_replaceメソッドを使用して、無効なproductID文字列を有効な製品ID。
$productID=preg_replace('/[\s]+.*/','',$productID);
URLでスペースを探して、その後のすべてを削除します。
$str = "I am a PHP Developer";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
if (isset($str_arr[$i + 1]) && $str_arr[$i] == ' ' && $str_arr[$i] == $str_arr[$i + 1]) {
unset($str_arr[$i]);
}
else {
continue;
}
}
echo implode("", $str_arr);