utf-8을 사용하는 php substr () 함수는 끝에 표시를 남깁니다.
다음은 간단한 코드입니다.
<?php
$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";
$foo = substr($var,0,142);
echo $foo;
?>
다음과 같이 출력됩니다.
Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продук ...
운없이 mb_substr ()을 시도했습니다. 이 작업을 올바르게 수행하는 방법은 무엇입니까?
위의 설명은 서버에서 mbstring이 활성화되어있는 한 정확합니다.
$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";
$foo = mb_substr($var,0,142, "utf-8");
다음은 PHP 문서입니다.
http://php.net/manual/en/book.mbstring.php
유니 코드 문자열에 대한 적절한 (논리적) 대안입니다.
<?php
function substr_unicode($str, $s, $l = null) {
return join("", array_slice(
preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
}
$str = "Büyük";
$s = 0; // start from "0" (nth) char
$l = 3; // get "3" chars
echo substr($str, $s, $l) ."\n"; // Bü
echo mb_substr($str, $s, $l) ."\n"; // Bü
echo substr_unicode($str, $s, $l); // Büy
?>
PHP5는 기본적으로 UTF-8을 이해하지 못합니다. PHP6가 나오면 제안됩니다.
멀티 바이트 문자열 함수 를 사용하여 UTF-8 문자열을 안전하게 조작 하십시오 .
예를 들어, mb_substr()
귀하의 경우.
UTF-8 문자열에 대해 substr 함수에서 상수를 사용하지 마십시오. $ st = substr ($ text, $ beg, 100); 50 % 확률로 문자열 끝에서 문자의 절반을 얻을 수 있습니다.)
이렇게하세요 :
$postion_degin = strpos($text, $first_symbol);
$postion_end = strpos($text, $last_symbol);
$len = $postion_end - $postion_degin +1;
$st = substr($text, $postion_degin, $len);
100 % 결과
mb_substr 없음
문자열에 유니 코드 (멀티 바이트) 문자가 포함될 수 있고 이러한 문자를 중단하지 않으려면 원하는 substr
내용에 따라 다음 두 가지 중 하나로 바꿉니다.
142 자로 제한 :
mb_substr($var, 0, 142);
142 바이트로 제한 :
mb_strcut($var, 0, 142);
strlen
함수 를 사용 하려면 반환하려는 문자열의 길이를 계산하고 문자열 $word
에 UTF-8
인코딩이있는 경우 mb_strlen()
함수 를 사용해야 합니다.
$foo = mb_substr($word, 0, mb_strlen($word)-1);
이 솔루션이 저에게 많은 도움이 되었기를 바랍니다.
<?php
if(mb_strlen($post->post_content,'UTF-8')>200){
$content= str_replace('\n', '', mb_substr(strip_tags($post-> post_content),
0, 200,'UTF-8'));
echo $content.'…';
}else{
echo str_replace('\n', '', strip_tags($post->post_content));
}
?>
ReferenceURL : https://stackoverflow.com/questions/9087502/php-substr-function-with-utf-8-leaves-marks-at-the-end
'IT박스' 카테고리의 다른 글
데카르트 곱을 수행하는 좋은 LINQ 방법이 있습니까? (0) | 2021.01.11 |
---|---|
JSF에서 CSRF, XSS 및 SQL 주입 공격 방지 (0) | 2021.01.11 |
UIWebView에서 사용자 지정 글꼴 사용 (0) | 2021.01.11 |
jQuery UI datepicker로 날짜를 선택할 때 트리거 기능 (0) | 2021.01.11 |
메뉴 항목을 어떻게 동적으로 만들 수 있습니까? (0) | 2021.01.11 |