ฉันได้รับสตริงจากแบบสอบถามฐานข้อมูลจากนั้นฉันจะลบแท็ก HTML ทั้งหมดการคืนค่าขนส่งและบรรทัดใหม่ก่อนที่จะใส่ลงในไฟล์ CSV สิ่งเดียวคือฉันไม่สามารถหาวิธีลบช่องว่างสีขาวส่วนเกินออกจากระหว่างสตริงได้
วิธีใดเป็นวิธีที่ดีที่สุดในการลบอักขระช่องว่างภายใน
ฉันได้รับสตริงจากแบบสอบถามฐานข้อมูลจากนั้นฉันจะลบแท็ก HTML ทั้งหมดการคืนค่าขนส่งและบรรทัดใหม่ก่อนที่จะใส่ลงในไฟล์ CSV สิ่งเดียวคือฉันไม่สามารถหาวิธีลบช่องว่างสีขาวส่วนเกินออกจากระหว่างสตริงได้
วิธีใดเป็นวิธีที่ดีที่สุดในการลบอักขระช่องว่างภายใน
คำตอบ:
ไม่แน่ใจว่าต้องการอะไรแน่นอน แต่มีสองสถานการณ์ดังนี้
หากคุณเป็นเพียงการจัดการกับส่วนเกินwhitespaceในจุดเริ่มต้นหรือจุดสิ้นสุดของสตริงที่คุณสามารถใช้trim()
, ltrim()
หรือrtrim()
จะเอามันออก
ถ้าคุณจะจัดการกับช่องว่างพิเศษภายในสตริงพิจารณาpreg_replace
หลายมีเพียงหนึ่งเดียวwhitespaces " "*
whitespace " "
ตัวอย่าง:
$foo = preg_replace('/\s+/', ' ', $foo);
$foo = preg_replace( '/\s+/', ' ', $foo );
เจตจำนงฆ่าผลของnl2br()
$str = str_replace(' ','',$str);
หรือแทนที่ด้วยขีดล่าง & nbsp; ฯลฯ เป็นต้น
Hi Earth
มี 4 ช่องว่างHiEarth
ในระหว่างจะกลายเป็น: สิ่งนี้ไม่ได้ช่วยแก้ปัญหาของฉันเกี่ยวกับคำถามที่เกี่ยวข้อง
$str = trim(preg_replace('/\s+/',' ', $str));
บรรทัดของโค้ดด้านบนจะลบช่องว่างพิเศษรวมทั้งช่องว่างนำหน้าและต่อท้าย
ไม่มีตัวอย่างอื่นที่ใช้ได้ผลสำหรับฉันฉันจึงใช้ตัวอย่างนี้:
trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))
สิ่งนี้จะแทนที่แท็บทั้งหมดบรรทัดใหม่ช่องว่างคู่และอื่น ๆ เป็น 1 ช่องว่าง
\s+
ผมมีปัญหาเกี่ยวกับเพียง แม้ว่ามันจะย้อนกลับไปในปี 2014 ดังนั้นอาจจะมีการเปลี่ยนแปลงไม่ได้สัมผัส PHP ในช่วง 3 ปีที่ผ่านมาไม่สามารถแสดงความคิดเห็นได้ แต่จะให้คำตอบปัจจุบันในขณะที่เป็นวิธีแก้ปัญหาและอาจยังคงมีอยู่ในบางกรณี
หากคุณต้องการแทนที่เฉพาะช่องว่างหลาย ๆ ช่องในสตริงตัวอย่าง: "this string have lots of space . "
และคุณคาดว่าคำตอบจะเป็น
"this string have lots of space"
คุณสามารถใช้วิธีแก้ไขปัญหาต่อไปนี้:
$strng = "this string have lots of space . ";
$strng = trim(preg_replace('/\s+/',' ', $strng));
echo $strng;
มีข้อบกพร่องด้านความปลอดภัยในการใช้ 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));
สิ่งนี้จะลบช่องว่างที่เกินออกจากสตริงทั้งสองด้านและแปลงช่องว่างสองช่องให้เป็นช่องว่างภายในสตริง โปรดทราบว่าสิ่งนี้จะไม่แปลงช่องว่างสามช่องขึ้นไปในแถวเป็นช่องเดียว! อีกวิธีหนึ่งที่ฉันสามารถแนะนำได้คือการใช้ระเบิดและระเบิดซึ่งปลอดภัยกว่า แต่ไม่เหมาะสมโดยสิ้นเชิง!
$str = implode(" ", array_filter(explode(" ", $str)));
คำแนะนำของฉันใช้เนทีฟสำหรับลูปหรือใช้นิพจน์ทั่วไปเพื่อทำงานประเภทนี้
เพื่อขยายคำตอบของ Sandip ฉันมีสตริงจำนวนมากปรากฏขึ้นในบันทึกที่เข้ารหัสผิดใน bit.ly พวกเขาตั้งใจจะโค้ดแค่ URL แต่ใส่ที่จับ twitter และอื่น ๆ หลังจากเว้นวรรค มันเป็นแบบนี้
? productID =26%20via%20@LFS
โดยปกตินั่นจะไม่ใช่ปัญหา แต่ฉันได้รับความพยายามในการฉีด SQL จำนวนมากดังนั้นฉันจึงเปลี่ยนเส้นทางสิ่งที่ไม่ใช่ ID ที่ถูกต้องไปยัง 404 ฉันใช้เมธอด preg_replace เพื่อสร้างสตริง productID ที่ไม่ถูกต้องให้เป็น รหัสผลิตภัณฑ์ที่ถูกต้อง
$productID=preg_replace('/[\s]+.*/','',$productID);
ฉันมองหาช่องว่างใน URL แล้วลบทุกอย่างออก
เมื่อเร็ว ๆ implode(' ', array_filter(explode(' ', $str)))
นี้ผมเขียนฟังก์ชั่นที่เรียบง่ายที่เอาพื้นที่สีขาวส่วนเกินออกจากสตริงโดยไม่ต้องแสดงออกปกติ
$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);