테스트 사이트 - 개발 중인 베타 버전입니다

Regex 정규식 질문 채택완료

울라프 4년 전 조회 2,280

/bbs/write_update.php

</strong></p>

<p>$wr_subject = '';

if (isset($_POST['wr_subject'])) {

    $wr_subject = substr(trim($_POST['wr_subject']),0,255);

    $wr_subject = preg_replace("#[\\\]+$#", "", $wr_subject);

}</p>

<p><strong>

 

 

요 #[\\\]+$# 사탕같이 생긴 정규식은 무슨 뜻인가요? 지우면 안되나요?

글자가 몇개 짤리는거 같아요.

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
B
4년 전

#[\\\]+$#

 

앞뒤의 #는 Delimiters (구분자, 구분 기호, 구획 문자)입니다.

- https://www.php.net/manual/en/regexp.reference.delimiters.php

 

[]는 Character classes (문자 클래스)입니다.

- https://www.php.net/manual/en/regexp.reference.character-classes.php

 

\\\는 Escape sequences (이스케이프 시퀀스)입니다. \\\\ 4개 써야 하는데, 3개로 통과가 되네요.

- https://www.php.net/manual/en/regexp.reference.escape.php

 

+는 Repetition (반복)입니다.

- https://www.php.net/manual/en/regexp.reference.repetition.php

 

$는 Meta-character (메타 문자)입니다.

- https://www.php.net/manual/en/regexp.reference.meta.php

 

$wr_subject 문자열에서 끝 쪽의 한 글자 이상의 역슬래시 제거 용도네요.

 

[]로 감쌀 필요없이 #\\\+$#으로 해도 무방하며,

그냥 $wr_subject = rtrim($wr_subject, '\\'); 처럼 문자열 함수 사용해도 무방합니다.

 

$wr_subject = substr(trim($_POST['wr_subject']),0,255);

글자가 몇 개 잘린다고 하는 것은 이 부분 원인이겠네요.

255바이트까지 자르는데, UTF-8에선 한글이 3바이트 이상이라 제목이 길면 잘릴 수 있겠네요.

DB에서 VARCHAR(255)라고 하면 그냥 mb_substr($wr_subject, 0, 255, 'UTF-8'); 쓰면 되는데….

 

어라? 3바이트로 잘라도 한글 85자까지인데 그 이하에서 잘린다면 다른 문제겠네요.

잘린다는 원문 제목과 잘린 후의 제목이 궁금하네요. @_@);;;

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

엑스엠엘
4년 전
아직도 mb_substr() 안 쓰는 코드가 남아 있는 건가요?
아니면 구 버전일까요?
B
BiHon
4년 전
최근 5.4.18 버전 받아서 찾아보니 있네요.
/bbs/qawrite_update.php
/bbs/write_update.php
제목, 내용, 링크(MEDIUMTEXT인데 1000바이트 자름),
qa_content도 MEDIUMTEXT(16,777,215)인데 65536으로 자르네요.
:

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인