2011-01-25 4 views
24

के साथ विशेष वर्णों को सौदा करना मुझे अभी भी समझ में नहीं आता कि iconv काम करता है।PHP: आइकनव

उदाहरण के लिए

,

$string = "Löic & René"; 
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 

मैं मिलता है,

नोटिस: iconv() [function.iconv]: में ...

इनपुट स्ट्रिंग में एक अमान्य वर्ण का पता चला

$string = "Löic"; या $string = "René";

मैं मिलता है,

नोटिस:। iconv() [function.iconv]: में इनपुट स्ट्रिंग में एक अधूरी multibyte चरित्र का पता चला

मैं $string = "&";

साथ कुछ भी नहीं मिलता है अलग outputs मैं उन्हें दो अलग-अलग में स्टोर की जरूरत के दो सेट कर रहे हैं मेरी डेटाबेस की तालिका के अंदर कॉलम,

  1. मैं साफ यूआरएल के लिए Loic & Rene को Löic & René कन्वर्ट करने के लिए पु जरूरत rposes।

  2. मैं उन्हें रखने के लिए के रूप में वे कर रहे हैं की जरूरत है - Löic & RenéLöic & René के रूप में उसके बाद ही उन्हें htmlentities($string, ENT_QUOTES); साथ परिवर्तित जब उन्हें अपने html पृष्ठ पर प्रदर्शित करना।

मैं नीचे php.net में दिए गए सुझावों में से कुछ के साथ की कोशिश की, लेकिन अभी भी काम नहीं करते,

मैं (एक स्थिति है जहाँ मैं कुछ पात्रों ट्रांस्लितेरातेद की जरूरत है, लेकिन दूसरों को नजरअंदाज कर दिया अयं की तरह अजीब विशेषक के लिए किया था या हम्ज़ा)। // ट्रान्सलिट // इग्नोर जोड़ना मेरे लिए चाल करना प्रतीत होता था। यह सब कुछ लिप्यंतरित करता है जो लिप्यंतरित करने में सक्षम है, लेकिन फिर उन चीजों को फेंकता है जो नहीं हो सकते हैं।

तो:

$string = "ʿABBĀSĀBĀD"; 

echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $string); 
// output: [nothing, and you get a notice] 

echo iconv('UTF-8', 'ISO-8859-1//IGNORE', $string); 
// output: ABBSBD 

echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $string); 
// output: ABBASABAD 
// Yay! That's what I wanted! 

और एक अन्य,

Andries Seutens 07-Nov-2009 07:38 
When doing transliteration, you have to make sure that your LC_COLLATE is properly set, otherwise the default POSIX will be used. 

To transform "rené" into "rene" we could use the following code snippet: 
setlocale(LC_CTYPE, 'nl_BE.utf8'); 

$string = 'rené'; 
$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); 

echo $string; // outputs rene 

कैसे मैं वास्तव में उन्हें बाहर काम कर सकते हैं?

धन्यवाद।

संपादित करें:

यह वह जगह है स्रोत फ़ाइल मैं कोड का परीक्षण,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" class="no-js"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<?php 
$string = "Löic & René"; 
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 
?> 
</html> 
+0

बीटीडब्लू: आपको एहसास है कि 'आईओ' और आईएसओ -885 9 -1 में हैं?अनुचित इनपुट वर्णमाला के अलावा, आप अपने आउटपुट वर्णमाला को 'ASCII // ट्रान्सलिट' में बदलना चाहेंगे। – Wrikken

+7

मैं इन charsets के साथ इतना उलझन में हूँ ... – laukok

+1

धन्यवाद! मुझे कुछ कोरियाई पात्रों को यूटीएफ -8 में डीकोड करना पड़ा और यह वास्तविक सिरदर्द था - अंत में, केवल एक चीज जो मदद कर रही थी: '$ परिवर्तित = iconv ('ईयूसी-केआर', 'यूटीएफ -8 // ट्रान्सलिट', $ डेटा); ' – ShayLivyatan

उत्तर

12

और तुम UTF-8 एन्कोडिंग में अपने स्रोत फ़ाइल को सहेजने किया? यदि नहीं (और मुझे लगता है कि आपने तब से "अपूर्ण मल्टीबाइट वर्ण" त्रुटि उत्पन्न नहीं की है), तो पहले इसे आजमाएं।

+0

शायद अधिकतर उत्तर (या यदि स्ट्रिंग्स किसी फ़ाइल में उत्पन्न नहीं होती हैं, तो डेटा के किसी भी स्रोत (डीबी, http, आदि) के लिए अनुचित चरित्र सेट होता है। एक बात निश्चित है: इनपुट utf-8 नहीं है। – Wrikken

+0

@wimvds: धन्यवाद। मैं अपनी स्रोत फ़ाइल को यूटीएफ -8 एन्कोडिंग में कैसे सहेजूं? कृपया मेरा संपादन ऊपर देखें - मेरे पास मेटा में मेटफ -8 है <मेटा http-equiv = "सामग्री-प्रकार "सामग्री =" पाठ/एचटीएमएल; charset = utf-8 "/> - क्या यह सही है? – laukok

+0

@lauthiamkok: यदि आप अभी भी ऊपर दिए गए उदाहरणों का परीक्षण कर रहे हैं तो एक अच्छा संपादक/आईडीई का उपयोग करें जो आपको फ़ाइल एन्कोडिंग का चयन करने की अनुमति देता है (यानि विंडोज़, ग्रहण/नेटबीन पर किसी भी प्रमुख ओएस पर नोटपैड ++)। वेबपृष्ठों से इनपुट के लिए आपको या तो मेटा टैग या प्रासंगिक शीर्षलेख कॉल का उपयोग करना चाहिए (या अधिमानतः दोनों) और MySQL का उपयोग करते समय, सुनिश्चित करें कि आप इसे यूटीएफ -8 मोड में भी खोलें ('सेट नाम' utf-8'')। – wimvds

18
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($s)); 
+3

+1, 'utf8_encode() 'अकेले मेरे लिए ठीक काम किया, धन्यवाद! – John

+8

ध्यान दें कि 'utf8_encode() 'केवल आईएसओ -885 9 -1 को यूटीएफ -8 –

+1

ग्रेट स्निपेट में परिवर्तित करेगा। मुझे फ़ाइल नाम रूपांतरण में नोटिस का सामना करना पड़ा और इस समाधान ने मेरी समस्या को हल किया। – Giorgio