2012-06-02 12 views
10

मैं निम्नलिखित कोडक्यों PHP ट्रिम वास्तव में सभी सफेद जगह और लाइन ब्रेक को हटा नहीं है?

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh), " \t\n\r")))); 

मैं भी पहले से इन की कोशिश की थी के साथ एक फ़ाइल से इनपुट हथियाने रहा हूँ, जबकि

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh))))); 
$jap= addslashes(strtolower(trim(fgets($fh), " \t\n\r"))); 

समस्या निवारण और अगर मैं गूंज $ यह कोड में ठीक लग रहा है, तो बाद में Jap , $ jap में किसी भी अन्य बदलाव के बिना इसे डीबी में डाला गया है, हालांकि मैंने एक तुलना परीक्षण देखा है जो जांचता है कि क्या यह जैप पहले से ही डीबी में झूठा लौटा है, जब मैं स्पष्ट रूप से देख सकता हूं कि जैप की एक ही सटीक प्रविष्टि डीबी में है । तो मैं जेपी एंट्री की प्रतिलिपि बनाता हूं जो सीधे phpmyadmin से या मेरी साइट से डाला गया था जहां जैप प्रदर्शित होता है और नोटपैड में पेस्ट करता है, मुझे लगता है कि यह इस तरह पेस्ट करता है ... (यह नीचे उद्धरणों में एक सटीक पेस्ट है)

"

バ ス に の っ て, う み へ 行 き ま し た"

और स्पष्ट रूप से मुझे लगता है कि सफेद स्थान और टूट जाता है या जो कुछ भी यह है बिना की जरूरत है, यह।

इसलिए जहां तक ​​मैं ट्रिम बता सकता हूं वह ऐसा नहीं कर रहा है जो यह कहता है कि यह करेगा। या मैं यहाँ कुछ याद आ रही है। यदि ऐसा है, तो ये क्या है?

अद्यतन: जैक जवाब

preg_replace मदद नहीं की, लेकिन यहाँ के संबंध में मैं क्या किया है, मैं निर्धारित करने के लिए कि वह हिस्सा "भाग मैं चाहता हूँ नहीं है" है BIN2HEX() का इस्तेमाल किया efbbbf मैंने इसे प्रतिस्थापित करने के लिए $ jap ले कर और जापानी को हटाकर मुझे ढूंढने की उम्मीद की है, और बाइन 2hex में क्या बचा है। और परिणाम के ऊपर "efbbbf"

echo bin2hex(str_replace("どちらがあなたの本ですか","",$jap)); 

ऊपर के उत्पादन efbbbf था लेकिन यह क्या है? क्या मैं इसे किसी भी तरह से हटाने के लिए str_replace बना सकता हूं?

+2

'addlashes' क्या है? और कृपया यह न कहें कि यह डेटाबेस के लिए है। – mario

+1

क्या आपने दूसरे पैरामीटर के बिना 'ट्रिम ($ str) 'कोशिश की थी? [मैनुअल] (http://php.net/trim) के अनुसार, आपका संस्करण एनयूएल बाइट्स और लंबवत टैब को नहीं हटाएगा (जो भी "लंबवत टैब" है ...) – bfavaretto

+1

संभावित डुप्लिकेट [ट्रिम यूनिकोड व्हाइटस्पेस PHP 5.2] (http://stackoverflow.com/questions/4166896/trim-unicode-whitespace-in-php-5-2) – mario

उत्तर

14

trim फ़ंक्शन यूनिकोड सफेद रिक्त स्थान के बारे में नहीं जानता है। आप इस कोशिश कर सकते:

preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $str); 

रूप से लिया: अन्यथा Trim unicode whitespace in PHP 5.2

, आप एक bin2hex() पता लगाने के लिए क्या पात्रों मोर्चे पर जोड़े जा रहे हैं कर सकते हैं।

अद्यतन

आपकी फ़ाइल UTF8 बीओएम होता है; इसे हटाने के लिए:

$f = fopen("file.txt", "r"); 
$s = fread($f, 3); 
if ($s !== "\xef\xbb\xbf") { 
    // bom not found, rewind file 
    fseek($f, 0, SEEK_SET); 
} 
// continue reading here 
+0

preg_replace मदद नहीं करता है, लेकिन मैंने यह किया है, मैंने bin2hex() का उपयोग यह निर्धारित करने के लिए किया है कि "भाग मैं नहीं चाहता" भाग efbbbf मैंने इसे प्रतिस्थापित करने और निकालने में $ jap ले कर ऐसा किया जापानी मैं खोजने की उम्मीद कर रहा हूं, और बाएं 2hex में क्या बचा है। और परिणाम उपरोक्त "efbbbf" गूंज bin2hex (str_replace ("ど ち ら が あ な た の 本 本 す か", "", $ jap)); – user1397417

+0

@ user1397417 सोचते हैं कि मैंने इसे पाया है। आपकी फ़ाइल में यूटीएफ 8 बीओएम हेडर है। मेरा जवाब अपडेट किया गया। –

+0

आपका अपडेट किया गया समाधान ऐसा लगता है कि उसने मेरी समस्या हल कर दी है, धन्यवाद! मैं आपके लिए "यह उत्तर उपयोगी था" पर क्लिक करता था लेकिन उसने कहा कि इसे "15 प्रतिष्ठा" माफ करना – user1397417

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