공백을 밑줄로 바꾸기


136

나는 사용자가 같은 이름을 입력 것이라는 PHP 스크립트가 있습니다 Alex_Newton,

그러나 일부 사용자는 밑줄 대신 공백을 사용하므로 내 질문은 다음과 같습니다.

PHP에서 공백을 밑줄로 자동 대체하는 방법은 무엇입니까?

답변:



70

다른 사람들 str_replace이을 사용하여 수행하는 방법을 설명 했으므로 정규 표현식을 사용 하여이를 수행 할 수도 있습니다.

$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 또는 탭)으로 제거 할 수도 있습니다.
Paul

1

이것은 내 파일의 이름을 지정하기 위해 공백을 밑줄로 만드는 코드의 일부입니다.

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

1

나는 이런 식으로 사용

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

0

당신은 str_replace 당신의 이름이 변수에 있다고 말할 수 있습니다$name

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

또 다른 방법은 정규식을 사용하는 것입니다 .2 시간 공간 등을 제거하는 데 도움이됩니다.

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

0

Strtr문자열 대신 단일 문자를 대체하므로이 예제에 적합한 솔루션입니다. 아마도 strtr더 빠르다고 생각 str_replace되지만 (이 사용 사례에서는 둘 다 엄청나게 빠릅니다).

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

멋지고, 여러 개의 긴 파일 (로그?)에서 공백을 "_"로 변환하면 훨씬 빠를 수 있습니까? (증거 / 참조가 없지만 실행 속도에 관심이있는 사람에게는 흥미로운 답변 일 수 있습니다).
Paul

폴, 나도 그렇게 생각해 사용 해보고 벤치마킹하십시오.
Thoracius Appotite

0

str_replace-확실한 해결책입니다. 그러나 때로는 공간이 정확히 무엇인지 알아야합니다. CSV 파일의 공백에 문제가 있습니다.

두 개의 문자가 있었지만 그 중 하나는 0160 (0x0A0)이고 다른 문자는 보이지 않습니다 (0x0C2)

내 최종 솔루션 :

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

mc의 HEX 뷰어에서 보이지 않는 심볼을 찾았습니다 (자정 뷰어-F3-F9).


무엇에 대해 '/\s+/'?
FlameStorm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.