แทนที่ Spaces ด้วย Underscores


136

ฉันมีสคริปต์ PHP ที่ผู้ใช้จะป้อนชื่อเช่น: Alex_Newton,

อย่างไรก็ตามผู้ใช้บางคนจะใช้ช่องว่างมากกว่าขีดล่างดังนั้นคำถามของฉันคือ:

ฉันจะแทนที่ช่องว่างอัตโนมัติด้วยขีดล่างใน PHP ได้อย่างไร

คำตอบ:



70

ตามที่คนอื่น ๆ ได้อธิบายถึงวิธีการใช้str_replaceงานคุณสามารถใช้ regex เพื่อทำสิ่งนี้

$name = preg_replace('/\s+/', '_', $name);

11
นี่เป็นทางออกที่ดีกว่าในแง่ที่ว่ามันจะแทนที่ช่องว่างหลายช่องด้วยการขีดเส้นใต้เดียวซึ่งโดยปกติจะเป็นเอาต์พุตที่ต้องการ
frostymarvelous

5
แท็บและอะไรก็ได้เช่นกัน
Loupax





7

คุณสามารถทำเช่นนี้เพื่อป้องกันไม่ให้คำเริ่มต้นหรือลงท้ายด้วยเครื่องหมายขีดล่างเช่น _words_more_words_ ซึ่งจะหลีกเลี่ยงการเริ่มต้นและสิ้นสุดด้วยการเว้นวรรคสีขาว

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);

สิ่งนี้น่าสนใจเนื่องจากช่องว่างในจุดเริ่มต้น / สิ้นสุดของบรรทัดจะไม่ถูกแทนที่ด้วย _ แต่ถูกลบออก อย่างไรก็ตามโปรดทราบว่ามันอาจ / จะดึงตัวละครอื่น ๆ จากจุดเริ่มต้น / สิ้นสุดของสตริงเป็น (\ r และ \ n หรือแท็บ)
พอล

1

นี่เป็นส่วนหนึ่งของรหัสของฉันซึ่งทำให้มีช่องว่างเป็นขีดล่างสำหรับตั้งชื่อไฟล์ของฉัน:

$file = basename($_FILES['upload']['name']);
$file = str_replace(' ','_',$file);


0

คุณสามารถใช้str_replace พูดชื่อของคุณเป็นตัวแปร$name

$result = str_replace(' ', '_', $name);

อีกวิธีหนึ่งคือการใช้ regex ซึ่งจะช่วยกำจัดพื้นที่ 2 เวลา ฯลฯ

  $result=  preg_replace('/\s+/', '_', $name);

0

Strtrแทนที่อักขระเดี่ยวแทนสตริงดังนั้นจึงเป็นทางออกที่ดีสำหรับตัวอย่างนี้ คาดว่าstrtrจะเร็วกว่าstr_replace(แต่สำหรับกรณีการใช้งานนี้พวกเขาทั้งสองอย่างรวดเร็วอย่างล้นหลาม)

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton

เจ๋งถ้าใครจะแปลงช่องว่างเป็น "_" ในไฟล์ยาว ๆ หลาย ๆ ไฟล์ (บันทึก?) สิ่งนี้สามารถวัดได้เร็วขึ้นไหม? (แม้ว่าจะไม่มีหลักฐาน / การอ้างอิง แต่อาจเป็นคำตอบที่น่าสนใจสำหรับทุกคนที่สนใจเรื่องความเร็วในการใช้งาน)
พอล

เฮ้พอลฉันจะคิดอย่างนั้น ลองใช้และสร้างมาตรฐาน
Thoracius Appotite

0

str_replace- มันเป็นทางออกที่ชัดเจน แต่บางครั้งคุณต้องรู้ว่าช่องว่างตรงนั้นมีอะไรบ้าง ฉันมีปัญหากับช่องว่างจากไฟล์ csv

มีสองตัวอักษร แต่หนึ่งในนั้นคือ 0160 (0x0A0) และอื่น ๆ ก็มองไม่เห็น (0x0C2)

ทางออกสุดท้ายของฉัน:

$str = preg_replace('/\xC2\xA0+/', '', $str);

ฉันพบสัญลักษณ์ที่มองไม่เห็นจากตัวแสดง HEX จาก mc (ตัวแสดงเวลาเที่ยงคืน - F3 - F9)


เกี่ยวกับ'/\s+/'อะไร
FlameStorm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.