Boşlukların Alt Çizgi ile Değiştirilmesi


136

Kullanıcıların gibi bir ad gireceğini bir PHP Koduna: Alex_Newton,

Ancak, bazı kullanıcılar alt çizgi yerine boşluk kullanacak, bu yüzden sorum şu:

PHP'de alanları otomatik olarak Underscores ile nasıl değiştirebilirim?

Yanıtlar:



70

Diğerleri bunu nasıl kullanarak açıkladı str_replace, bunu elde etmek için regex kullanabilirsiniz.

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

11
Bu, birden fazla boşluğu, genellikle istenen çıktı olan tek bir alt çizgi ile değiştirmesi açısından daha iyi bir çözümdür.
ayaz harika

5
Ayrıca sekmeler ve ne olursa olsun
Loupax





7

Ayrıca, kelimelerin _words_more_words_ gibi alt çizgilerle başlamasını veya bitmesini önlemek için de yapabilirsiniz. Bu, boşluklarla başlayıp bitmesini önler.

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

Bu ilginçtir, çünkü satırın başındaki / sonundaki boşluklar _ ile değiştirilmeyecek, bunun yerine kaldırılacaktır. Bununla birlikte, dizenin başlangıcından / sonundan diğer karakterleri de (\ r ve \ n veya sekmeler) olarak şeritleyebileceğini / kaldıracağını unutmayın.
Paul

1

Bu benim dosyaları adlandırma için alt çizgiler içine boşluklar yapar benim kodun bir parçasıdır:

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

1

Böyle kullandım

$option = trim($option);
$option = str_replace(' ', '_', $option);

0

Kullanabileceğiniz str_replace senin adını değişken olduğunu söylemek$name

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

başka bir yol, 2-zamanlı alanı ortadan kaldırmaya yardımcı olacağı için regex kullanmaktır.

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

0

Strtrdizeler yerine tekli karakterlerin yerini alır, bu nedenle bu örnek için iyi bir çözümdür. Sözde strtrdaha hızlıdır str_replace(ancak bu kullanım durumunda ikisi de ölçülemeyecek kadar hızlıdır).

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

Harika, eğer birden fazla, uzun dosya (günlük?) Boşlukları "_" dönüştürmek olsaydı bu daha hızlı olabilir? (Kanıt / referans olmamasına rağmen, yürütme hızı ile ilgilenen herkes için ilginç bir cevap olabilir).
Paul

Hey Paul, ben de öyle düşünürdüm. Deneyin ve kıyaslayın.
Thoracius Appotite

0

str_replace- açık bir çözümdür. Ama bazen tam olarak hangi alanların olduğunu bilmeniz gerekir. CSV dosyasındaki boşluklarla ilgili bir sorunum var.

İki karakter vardı ama bunlardan biri 0160 (0x0A0), diğeri görünmezdi (0x0C2)

son çözümüm:

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

Görünmez sembolü mc'den HEX görüntüleyiciden buldum (gece yarısı görüntüleyicisi - F3 - F9)


Ne olmuş '/\s+/'?
FlameStorm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.