하위 문자열을 사용할 때 희귀 문자가 나타납니다

사용자8348171

나는 그것이 인코딩 문제처럼 보인다는 것을 알고 있지만 그렇게 생각하지 않습니다. 사용자가 작업을 저장할 때 ckeditor를 사용하여 긴 텍스트(이야기)를 게시하는 사이트가 있습니다. 일부 HTML은 모든 테이블에 대해 utf8 인코딩을 위해 준비된 데이터베이스로 이동합니다.

모든 게시물에 대해 전체 텍스트의 일부인 "텍스트 축소판"을 생성합니다. 전체 텍스트는 utf-8을 사용하는 모든 페이지에서 좋아 보입니다.

내 "텍스트 축소판"을 가져오는 데 사용하는 코드:

     <?php
     $str = trim(strip_tags(nl2br($historia['texto']))); //get only text
     echo substr($str, 0, 99) . (strlen($str) > 100 ? '...' : ''); //get part of string, if original string was longer than 100 characters add 3 dots at the end
     ?>

지금까지 나는 한 달 이상 사이트를 운영해 왔으며, 문제는 처리할 다음 특정 문자열에 발생했습니다.

<p>Foto artística<br>Mi esposo invito uno de sus viejos amigos a casa, un
   hombre muy impresionante, llegó en un auto de lujo, vistiendo finas ropas, 
   reloj de plata, cadenas de oro y cosas impresionantes, el nos platico de 
   muchas de las cosas a las que se dedico desde que perdió la comunicación 
   con mi esposo, desde ayudante de cocina hasta productor de películas 
   independientes que había logrado vender por sumas importantes de dinero,
   el motivo de su visita era porque necesitaba a alguien como mi esposo 
   para salir en una de sus filmaciones, a cambio recibiría una buena 
   cantidad de dinero, clases de actuación y otros beneficios, claro que 
   aceptamos sin pensarlo.</p>

위의 php 코드로 처리하면 다음과 같은 결과가 나타납니다.

예술 사진남편은 오랜 친구 중 한 명을 집에 초대했는데 매우 인상적인 사람이 도착했습니다 ...

특정의 마지막 단어는 액센트가 llegó있고, 같은 문자열의 다른 단어와 "텍스트 썸네일" artística은 같은 문제가 없었습니다. 끝에 액센트가 있는 문자가 문제인 것 같습니다. 일부 PHP 기능을 사용하여 시도했습니다. 사용하기 전에 문자열을 인코딩/디코딩하려고 시도 substring하지만 결과를 얻지 못했습니다. 어떻게든 저를 솔루션으로 안내할 수 있다면 그렇게 하십시오.

다음은 온라인 편집기 https://ideone.com/m6OjUN 에서 동일한 방식으로 작동하는 PHP 코드입니다.

자테네프

substr바이트에서 작동합니다. 좋은 생각이 아닌 멀티 바이트 문자열을 제공합니다. 문자에 ó1바이트 이상이 있으면 문자를 나누는 이 문자의 바이트 사이의 위치에서 문자열을 정확히 분할합니다. mb_substr대신 시도 :

https://3v4l.org/jkAnv

<?php
$input = '<p>Foto artística<br>Mi esposo invito uno de sus viejos amigos a casa, un hombre muy impresionante, llegó en un auto de lujo, vistiendo finas ropas, reloj de plata, cadenas de oro y cosas impresionantes, el nos platico de muchas de las cosas a las que se dedico desde que perdió la comunicación con mi esposo, desde ayudante de cocina hasta productor de películas independientes que había logrado vender por sumas importantes de dinero, el motivo de su visita era porque necesitaba a alguien como mi esposo para salir en una de sus filmaciones, a cambio recibiría una buena cantidad de dinero, clases de actuación y otros beneficios, claro que aceptamos sin pensarlo.</p>';
     $str = trim(strip_tags(nl2br($input))); //get only text

     echo mb_substr($str, 0, 99) . (mb_strlen($str) > 100 ? '...' : ''); //get part of string, if original string was longer than 100 characters add 3 dots at the end
     ?>

문자/문자열의 바이트 수를 확인하려면 다음을 사용하십시오. strlen

https://3v4l.org/AKHid

<?php
var_dump(strlen('ó'));

참조:

http://php.net/manual/en/function.substr.php

http://php.net/manual/en/function.mb-substr.php

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

vim-gnome 설치 후 Vim을 사용하여 파일을 열 때 이상한 문자가 나타납니다.

tkinter에서 항목을 사용할 때 빈 문자열이 나타납니다.

문자열을 분할하면 변수에 저장할 때와 console.log-ing 할 때 다른 결과가 나타납니다.

Javascript / Jquery를 사용하여 XML 파일을 구문 분석 할 때 오류가 나타납니다.

장고 모델은 필드에 선택 사항이있을 때 희귀 한 문자열을 저장합니다.

! =를 사용하면 SQL에서 NOT IN을 사용할 때 다른 결과가 나타납니다.

문자가 나타날 때마다 문자열을 분할하지만 새 배열에 문자를 유지합니다.

modprode, bash : modprobe : command not found 명령을 사용하려고 할 때이 메시지가 나타납니다.

UIViewController의 textLabel.text가 NSObject에서 문자열을 할당하는 동안 nil이 나타납니다.

확인 대화 상자는 ISE를 사용할 때만 나타납니다.

콘솔로 인쇄 할 때 문자 사이에 추가 기호가 나타납니다.

데이터 바인딩을 사용할 때 Navbar가 2 번 나타납니다.

2D 문자 배열에 문자를 할당하려고 할 때 for 루프 내에서 배열 값을 나타내는 정수가 증가합니다.

쉼표가 처음 나타날 때 문자열을 2개의 하위 문자열로 분할하시겠습니까?

'Return false'는 문자열에 대해 입력을 확인할 때 문자가 나타나는 것을 중지하지 않습니다.

C에서 문자 / 문자열 포인터를 사용하면 이상한 출력이 나타납니다.

<DOCTYPE html>을 사용할 때 HTML 헤더 요소가 본문에 나타납니다.

INDEX는 변수 하위 문자열을 사용할 때 일치 항목을 반환하지 않습니다.

사용자가 모든 행을 스크롤 할 때 테이블 뒤에있는 버튼이 나타납니다.

strcpy가 크기 1의 대상 문자열을 사용할 때 소스 문자열의 첫 번째 문자를 생략하는 이유는 무엇입니까?

Sed가 문자열을 다른 문자열로 교체하면 잘못된 결과가 나타납니다.

문자열 내에서 Python의 .format으로 전달할 때 다른 문자열과 함께 튜플을 사용하는 데 문제가 있습니다.

나중에 변경할 때 사용할 PDF에서 정확한 문자열 위치를 가져옵니다.

Java에서 Oracle 프로 시저를 호출 할 때 "ORA-00911 : 유효하지 않은 문자"가 나타납니다.

문자열을 비교하면 잘못된 결과가 나타납니다.

C에서 하위 문자열을 수행하는 함수를 사용할 때 문자열 구문 분석이 실패합니다.

ValueError : str.index를 사용할 때 하위 문자열을 찾을 수 없습니다.

포트의 가용성을 확인하려고 할 때 오류 코드 10061이 나타납니다.

mysql을 사용하여 잘릴 때 하위 문자열 함수가 작동하지 않습니다

TOP 리스트

뜨겁다태그

보관