2012-12-05 8 views
6

मैं एक पेज पर डेटा फीड प्रदर्शित करने की कोशिश कर रहा हूं। हम एक अजीब चरित्र के साथ एन्कोडिंग मुद्दों का सामना कर रहे हैं। किसी कारण से, फ़ीड में U+FFFD वर्ण है। और htmlentities() चरित्र से बच नहीं पाएंगे, इसलिए मुझे इसे मैन्युअल रूप से प्रतिस्थापित करने की आवश्यकता है। (मैं PHP 5.3 उपयोग कर रहा हूँ)PHP: प्रतिस्थापन करने के लिए यू + एफएफएफडी को एन्कोड कैसे करें?

मैं निम्नलिखित की कोशिश की है: ऊपर काम का

$string = str_replace("\xFFFD", "_", $string); 
$string = str_replace("\XFFFD", "_", $string); 
$string = str_replace("\uFFFD", "_", $string); 
$string = str_replace("\x{FFFD}", "_", $string); 
$string = str_replace("\X{FFFD}", "_", $string); 
$string = str_replace("\P{FFFD}", "_", $string); 
$string = str_replace("\p{FFFD}", "_", $string); 

कोई नहीं।

इस पृष्ठ को पढ़ने के बाद - http://php.net/manual/en/regexp.reference.unicode.php - मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं। क्या मुझे पीसीआरई में यूटीएफ -8 समर्थन संकलित करने की आवश्यकता है?

+1

[यह मदद कर सकता है] (http://stackoverflow.com/questions/4766778/how-to-encode-ufffd-in-order-to-do-a-replace?rq=1) अलग-अलग भाषा लेकिन बहुत समान परिणाम – Dale

+1

भी [preg_replace] (http://php.net/preg_replace) फ़ंक्शन का उपयोग करने का प्रयास करें क्योंकि str_replace regex – Dale

+0

@redolent, दोस्तों, रोकें ['U + FFFD' वर्ण का दुरुपयोग] (http: // stackoverflow.com/questions/4766778/how-to-encode-ufffd-in-order-to-do-a-replace#comment44707644_4766778) इसके लिए ** ** के लिए ** नहीं है। – Pacerier

उत्तर

6

उपयोग preg_replace बजाय इस तरह:

$string = preg_replace('@\x{FFFD}@u', '_', $string); 
9

आप मूल समस्या को ठीक करने का प्रयास करना चाहिए, FFFD (unicode replacement character) में ज्यादातर मामलों कोई वास्तविक पाठ चरित्र लेकिन एक संकेत है कि कुछ प्रयास किया गया था मतलब नहीं है एक यूटीएफ एन्कोडिंग में डीकोड किया जाना चाहिए, लेकिन वास्तव में कुछ यूटीएफ एन्कोडिंग में एन्कोड नहीं किया गया था। यह अमान्य बाइट्स को चुपचाप हटाने या पूरी तरह से डिकोडिंग प्रक्रिया को रोकने का विकल्प है, यदि आप इसे देखते हैं, तो कोई त्रुटि हुई।

यह जानने का कोई तरीका नहीं है कि मूल चरित्र क्या था। विशेष रूप से आपके समाधान के साथ, क्योंकि आप _ के साथ चरित्र को प्रतिस्थापित करते हैं, आप यह भी नहीं जान सकते कि मूल स्रोत गलत तरीके से डीकोड किया गया था। आपको स्रोत पर वापस जाना चाहिए और इसे ठीक से डीकोड करना चाहिए।

नोट: स्रोत स्रोत के लिए का उपयोग शाब्दिक, सामान्य चरित्र के रूप में करना संभव है, उदाहरण के लिए, इसके बारे में बात करते समय, और इसमें कोई त्रुटि नहीं है। मैं अपने जवाब में इस संभावना को छोड़ रहा हूं।

+0

ठीक है, " " * * एक "वास्तविक" चरित्र है ... :) लेकिन हाँ, मैं मानता हूं कि कुछ मूल समस्या है ओपी अनदेखा कर रहा है। +1 – deceze

+0

@ अच्छी तरह से हटाएं, बल्कि यह सामान्य पाठ चरित्र नहीं है, लेकिन आप जानते हैं कि मेरा क्या मतलब है? – Esailija

+0

अच्छा, यह * एक असली, सामान्य पाठ चरित्र है। बस, ☃ और 風 असली पात्र हैं। यह विशेष मामलों में प्रयोग किया जाता है। :) – deceze

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