내가 관리하는 사이트에는 7000여 개의 콘텐츠가 있다. 그런데 옛날에 입력된 글들은 코드가 엉망이다. 심지어 글 맨 앞에 <p>가 들어가 있지 않은 경우도 있다. 그래서 프로그래밍을 통해 보완했다. 일일이 다 입력할 수는 없으니까.(나중에는 DB를 직접 다 뜯어고칠 생각인데 아직 시간이 없다.)

if(strpos($content, '<p')!==0 && strpos($content, '<P')!==0)
  $content = '<p>'.$content;

코드 자체는 간단하지만 신경쓸 게 좀 있다.

우선 strpos는 해당 문자열을 찾지 못할 경우 false를 반환하는데, PHP에서는 if 문에서 0도 false처리된다. 따라서 비교연산자를 ==로 쓰면 안 되고 ===로 써야 한다. 그래서 위 코드에서 !==라고 비교한 것이다.

==는 형 타입까지는 신경쓰지 않는 비교연산자고, ===는 형 타입까지 신경쓰는 비교연산자다.

0==false 는 true지만, 0===false는 true가 아니다.

그래서 php 설명서에서 strpos 항목을 보면 아래와 같은 설명이 있다.

Warning

이 함수는 논리 FALSE를 반환하지만, 0이나 “” 등, 논리 FALSE로 취급할 수 있는 다른 값을 반환할 수 있습니다. 자세한 정보는 논리형 섹션을 참고하십시오. 이 함수의 반환값을 확인하려면 === 연산자를 이용하십시오.

내 말이랑 같은 말이다. 문자열 위치가 맨 처음일 경우 0이 반환된다는 소리. 그래서 if문이 없다는 의미의 false랑 헷갈릴 수 있으니 꼭 ===연산자를 사용하라는 소리다.

이정도 설명했으면 될 테고.

PHP5부터는 stripos가 나왔다. 이건 대소문자 구분없이 검사할 수 있는 거다. 내가 사용하는 서버는 PHP4로 돼 있어서 stripos를 사용하지 못하고 && 연산자로 묶어서 대소문자를 검사했다.

이상.