2013-04-19 5 views
8

है मुझे एक अजीब समस्या है और मुझे यकीन नहीं है कि इसे कैसे हल किया जाए। मैं डेटाबेस से प्राप्त टेक्स्ट फ़ील्ड का पहला अक्षर प्राप्त करना चाहता हूं। इस चरित्र के साथ, मैं इसे बड़ा बनाने के लिए एक सीएसएस शैली लागू करूंगा।एक स्ट्रिंग का पहला अक्षर प्राप्त करें, जो एक फ्रेंच उच्चारण

<?php 
$str_en = "I am a sentence."; 
echo $str_en[0]; 

echo "<br /><br />"; 

$str_fr = "À tous les jours je fais du PHP."; 
echo $str_fr[0]; 

echo "<br /><br />"; 

$str_fr = "Étais-tu ici?"; 
echo $str_fr[0]; 
?> 

कोड इच्छा उत्पादन से ऊपर:

मैं

एक

एक

आप इस निम्नलिखित कोड की कोशिश करते हैं, तो आप समझ जायेंगे कि मेरी समस्या क्या है

ऐसा लगता है कि एक फ्रेंच चरित्र एक से अधिक बाइट्स का उपयोग कर रहा है I एन एक स्ट्रिंग। समस्या यह है कि मेरी सभी वाक्य एक फ्रेंच चरित्र के साथ शुरू नहीं होती है। इस

$str_fr = "<span class='firstletter'>É</span>tais-tu ici?"; 

करने के लिए

<?php 
$str_fr = "Étais-tu ici?"; 
?> 

या शायद CSS3 के साथ एक बेहतर तरीका यह करने के लिए नहीं है: कोई भी कैसे मैं एक समारोह है कि इस परिवर्तित हो सकता था एक विचार है।

+2

विशिष्ट जवाब के अलावा, आप:

<ul> <li>First db term</li> <li>Second db term</li> </ul> 

आप के रूप में प्रत्येक li तत्व करने के लिए पहले अक्षर सीएसएस लागू होते हैं: उदाहरण के लिए आप के रूप में आइटम के साथ एक सूची है, तो हो सकता है कि [जोएल का "निरंतर न्यूनतम सॉफ्टवेयर डेवलपर बिल्कुल पढ़ना चाहें, सकारात्मक रूप से यूनिकोड और कैरेक्टर सेट्स (कोई बहाना नहीं!) के बारे में जानना चाहिए"] (http://www.joelonsoftware.com/articles/Unicode.html)। –

उत्तर

14

के लिए mb_substr (http://www.php.net/manual/en/function.mb-substr.php) देखें

$first_char = mb_substr($string, 0, 1, 'utf-8'); // You may change the forth parameter according to your needed encoding. 

mb_substr एन्कोडिंग repects और सभी बाइट्स यहाँ पहले वर्ण का प्रतिनिधित्व करने देता है।


CSS3 के एक छद्म वर्ग ::first-letter जो केवल पहला अक्षर का चयन करता है।

उदाहरण:

आपका HTML है:

p:first-letter { /* Your properties */ } 

(पीएस: ::first-letter आजकल 'मानक उपयोग कर रहा है (डबल डबल पेट

<p id="french_text">Étais-tu ici?</p> 

तो फिर तुम से CSS3 के साथ यह पता कर सकते हैं एक डबल डबल कोलन के बजाय), लेकिन सबसे अच्छी पिछली संगतता के लिए केवल एक डबल कोलन का उपयोग करें)

+0

आपको हमेशा mb_string फ़ंक्शंस को एन्कोडिंग के साथ कॉल करने की आवश्यकता है जो स्ट्रिंग का उपयोग कर रहा है। अन्यथा कोड का प्रयास करने वाले किसी भी व्यक्ति का परिणाम * संभवतः टूटा हुआ * है। – hakre

+0

@ हकर हां, लेकिन मुझे एन्कोडिंग नहीं पता है जिसका उपयोग यहां किया जा रहा है। तो मैंने केवल एक इनलाइन टिप्पणी जोड़ दी है। (बीटीडब्ल्यू। आजकल आंतरिक एन्कोडिंग अधिक से अधिक utf-8 होना चाहिए ...) – bwoebi

+0

@ बोवेबी आप इसे अपने आउटपुट से अनुमानित कर सकते हैं। UTF-8। यूटीएफ -8 का पहला बाइट एन्कोडेड "ए" और "À", जब विंडोज -1252 के रूप में व्याख्या किया गया, तो Ã के रूप में दिखाई देता है। – Esailija

1

उत्पादन किया जाना चाहिए था:

I 

� 

� 

आप ठीक कर सकते हैं कि

<?php 
header("Content-Type: text/html; charset=utf-8"); 

अपने स्रोत कर वर्तमान में से UTF-8 में है, लेकिन ब्राउज़र विंडोज़ -1252 के रूप में यह व्याख्या करता है।

आप अपनी समस्या को पूरा करने के लिए $first_char = mb_substr($string, 0, 1, "UTF-8"); कर सकते हैं।

1

आप बेहतर रूप से कंटेनर तत्व में प्रथम अक्षर छद्म वर्ग लागू करते हैं। यह सभी प्रमुख ब्राउज़रों द्वारा समर्थित है और आपके एचटीएमएल को गड़बड़ नहीं करता है।पीएचपी multibyte स्ट्रिंग कार्यों का उपयोग कर

ul li:first-letter { font-size: 3em } 
संबंधित मुद्दे