2012-01-31 7 views
40

यहाँ पर निशान छोड़ देता है सरल कोडphp substr() utf-8 के साथ समारोह अंत

<?php 

$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных  продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта."; 

$foo = substr($var,0,142); 

echo $foo; 
?> 

है और यह कुछ इस तरह आउटपुट:

Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продук ...

मैंने mb_substr() को कोई किस्मत के साथ करने की कोशिश की। यह सही तरीके से कैसे करें?

+0

'mb_substr() 'जाने का तरीका है, ऐसा तब होता है जब एक बहु-बाइट चरित्र आधे में कट जाता है। क्या आप दिखा सकते हैं कि आपने इसके साथ क्या प्रयास किया और यह कैसे असफल रहा? –

+3

क्या आपने 'mb_substr' की कोशिश की जब आपने एन्कोडिंग (अंतिम पैरामीटर) निर्दिष्ट किया था? –

+0

वही करता है जो मैंने करने की कोशिश की थी। मेरे पास इंटरनेट पर नहीं है इसलिए मैं लिंक प्रदान नहीं कर सकता। यह कंपनी का एक लंबा विवरण है, जिसे मैंने एक वेबसाइट के होम पेज पर प्रदर्शित करने के लिए 142 वर्ण लंबे समय तक काट दिया। – Nazar

उत्तर

81

उपर्युक्त टिप्पणियां तब तक सही हैं जब आपके सर्वर पर 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

+0

धन्यवाद! आखिरी तर्क जो मैंने छोड़ा था वह "यूटीएफ -8" था, जिसे मैंने दस्तावेज़ीकरण के माध्यम से देखा था। – Nazar

3

PHP5 यूटीएफ -8 को मूल रूप से समझ में नहीं आता है। यह PHP6 के लिए प्रस्तावित है, अगर यह कभी बाहर आता है।

यूटीएफ -8 तारों को सुरक्षित रूप से कुशल बनाने के लिए multibyte string functions का उपयोग करें।

उदाहरण के लिए, mb_substr() आपके मामले में।

4

यूनिकोड स्ट्रिंग्स के लिए एक उचित (तार्किक) विकल्प;

<?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 
?> 

का प्रयोग करें PHP: mb_substr - Manual

+0

'mb_substr ($ str, $ s, $ l, 'UTF-8') 'वास्तविक उचित विकल्प है ...! एक सही ढंग से निर्दिष्ट चरित्र सेट के बिना यह परिणाम है कि परिणाम क्या है। – deceze

2

कभी UTF-8 स्ट्रिंग के लिए substr समारोह में लगातार उपयोग करें: $ सेंट = substr ($ पाठ, $ बेग, 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

+0

कूल अगर आपको पता है कि आप कौन से वर्णों को काटना चाहते हैं। यदि आप केवल तभी चाहते हैं, तो याद रखें कि यादृच्छिक स्ट्रिंग के पहले 3 वर्ण हैं, यह अच्छा नहीं है। सही तरीका mb_substr के साथ है। – Eir

0

मुझे आशा है कि यह समाधान आपको मदद क्योंकि इससे मुझे बहुत मदद मिली।

<?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)); 
} 
?> 
संबंधित मुद्दे