2012-09-16 10 views
15

मैं (एक SQLite डेटाबेस में) है निम्न स्ट्रिंग:PHP: क्या यूटीएफ -8 स्ट्रिंग को सही ढंग से सबमिट करना संभव है?

Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа.

स्ट्रिंग सही ढंग से पीएचपी print का उपयोग करके दिखाया गया है। मैं इस स्ट्रिंग के पहले 50 वर्ण प्राप्त करना चाहता हूं, यानी

Лампа в вытяжке на кухне меняется, начиная с вытас

मैं दोनों substr उपयोग करने की कोशिश की है और mb_substr, और

Лампа в вытяжке на кухне ме� है, यानी केवल 28 वर्ण मिलता है।

एमबीस्ट्रिंग की समस्याओं के बारे में यहां और कहीं और पढ़ने के बाद, मुझे एहसास हुआ कि यह वास्तव में 50 बाइट स्ट्रिंग (22 रूसी वर्ण = 44 बाइट्स प्लस 5 रिक्त स्थान प्लस 1 प्रश्न प्रतीक) है।

क्या इसका कोई अच्छा समाधान है? मेरे सभी तार यूटीएफ -8 हैं, इसलिए मैं निश्चित रूप से प्रत्येक बाइट इत्यादि के पहले बिट की जांच करके एक सबस्ट्र-फ़ंक्शन प्रोग्राम कर सकता हूं लेकिन यह निश्चित रूप से पहले किया जाना चाहिए, है ना?

अद्यतन: मेरा मानना ​​है कि mb_substr ठीक से काम नहीं करता है क्योंकि mb_detect_encoding()does not work properly

+10

आप कहते हैं कि आपने 'mb_substr' की कोशिश की है, लेकिन क्या आपने एन्कोडिंग निर्दिष्ट करने का प्रयास किया है? क्या mb_substr ($ string, 0, 10, "UTF-8") उदाहरण के लिए काम करता है? – h2ooooooo

+5

सुनिश्चित करें कि आप 'mb_substr' - 'mb_substr ($ इनपुट, 0, 50,' यूटीएफ -8 ') पर सही एन्कोडिंग पास करते हैं,' मेरे लिए काम करता है, 'mb_substr ($ इनपुट, 0, 50)' नहीं। – DCoder

+0

@ h2ooooooo: मैंने नहीं किया है, मैं मैनुअल में इसे याद किया। और यह करता है। कृपया अपनी टिप्पणी को उत्तर के रूप में जोड़ें, मैं इसे स्वीकार करूंगा। – texnic

उत्तर

7

सामान्य रूप से, उत्तर यहां दिखाई देता है। (ईमानदारी से, मैं के बारे में एक घंटे के लिए खोज की है)

(鉑) string functions and UTF8 in php पर एक उत्तर पढ़ता है:

आप उचित आंतरिक एन्कोडिंग सेट सुनिश्चित करें: mb_internal_encoding ('utf-8');

इस mb_internal_encoding ('utf-8') के साथ; सबकुछ ठीक काम करता है। आपको परेशान करने के लिए खेद है, मदद के लिए धन्यवाद।

+2

जैसा कि ओपी पर मेरी टिप्पणी में बताया गया है, मुझे यकीन है कि 'mb_substr ($ string, 0, 50, "UTF-8") भी काम करेगा, लेकिन मुझे खुशी है कि आपको अपना समाधान मिला (और हे , यदि आप 'mb_substr' कई अलग-अलग स्थानों का उपयोग कर रहे हैं तो यह एक बेहतर समाधान है!) – h2ooooooo

1

mb_substr() आपके लिए काम नहीं कर रहा है?

+0

मैंने कोशिश की, यह काम नहीं करता है। कृपया मेरी पोस्ट देखें। – texnic

16

यूआरएल नीचे देखें:

UTF-8

http://greekgeekz.blogspot.in/2010/11/php-substring-with-utf-8.html

साथ

http://osc.co.cr/extracting-a-substring-from-a-utf-8-string-in-php/

पीएचपी स्ट्रिंग PHP में एक UTF-8 स्ट्रिंग से सबस्ट्रिंग निकाला जा रहा है

या यह प्रयास करें:

उदाहरण # 1

$str1 = utf8_encode("Feliz día"); 

$str2 = substr($str1, 0, 9); 

echo utf8_decode($str2); 

// will output Feliz d� 

उदाहरण # 2

$str3 = mb_substr($str1, 0, 9, 'UTF-8'); 

echo utf8_decode($str3); 

// will output Feliz dí 

PHP के रूप में> = 5.3 आप भी एन्कोडिंग निर्देश घोषित करने और उपयोग कर सकते हैं सबस्ट्र फ़ंक्शन

उदाहरण # 3

declare(encoding='UTF-8'); 

$str4 = "Feliz día"; 

$str5 = substr($str4, 0, 9);echo $str5; 


// will output Feliz dí 
+2

हालांकि सबकुछ काम करता है, मुझे उदाहरण # 3 सबसे अधिक पसंद है: एक समारोह का उपयोग करना बेहतर है। हालांकि, 'घोषित करें' मैनुअल कहता है: "एन्कोडिंग घोषित मूल्य को PHP 5.3 में अनदेखा किया जाता है जब तक कि php को --enable-zend-multibyte के साथ संकलित नहीं किया जाता है। ध्यान दें कि PHP यह खुलासा नहीं करता है कि PHP को संकलित करने के लिए --enable-zend-multibyte का उपयोग किया गया था या नहीं phpinfo() के अलावा। " मेरा मानना ​​है, मैं अब के लिए mb_ कार्यों के लिए चिपके रहूंगा। – texnic

3

mb_strcut() की कोशिश करो।
इसका व्यवहार substr() पर समान है, सिवाय इसके कि यह अंतिम वर्ण टूटा हुआ नहीं है।
यदि आप जिस स्थिति में कटौती करने की कोशिश कर रहे हैं, उसमें 2 या अधिक बाइट्स के साथ एक मल्टीबाइट वर्ण है, mb_strcut() चरित्र को टुकड़ों में काट नहीं देगा, लेकिन इस चरित्र को अनदेखा कर देगा।

उदाहरण के लिए, यदि आपके स्ट्रिंग Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа. से 50 बाइट्स बाहर कटौती करने के लिए कोशिश कर रहे हैं, mb_strcut() चरित्र н छमाही में कटौती नहीं करेगा, लेकिन परिणाम से इसे समाप्त होगा।

$str = "Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа."; 

echo mb_strcut($str, 0, 50); 
// Prints: Лампа в вытяжке на кухне ме 

echo substr($str, 0, 50); 
// Prints: Лампа в вытяжке на кухне ме� 

echo mb_substr($str, 0, 50); 
// Prints: Лампа в вытяжке на кухне меняется, начиная с вытас 

उम्मीद है कि यह मदद करता है।

संबंधित मुद्दे