Regex 정규식 질문 채택완료
/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개
#[\\\]+$#
앞뒤의 #는 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개
/bbs/qawrite_update.php
/bbs/write_update.php
제목, 내용, 링크(MEDIUMTEXT인데 1000바이트 자름),
qa_content도 MEDIUMTEXT(16,777,215)인데 65536으로 자르네요.
:
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
아니면 구 버전일까요?