2010-06-17 22 views
21

मैं वर्डप्रेस को सीएमएस के रूप में उपयोग कर रहा हूं और Google मानचित्र स्क्रिप्ट में जानकारी विंडो को पॉप्युलेट करने के लिए उपयोगकर्ता फ़ील्ड को इनपुट करने की अनुमति देने का प्रयास कर रहा हूं। मैं आईडी का चयन करने और कस्टम फ़ील्ड से सामग्री खींचने के लिए इसका उपयोग कर रहा हूं।स्ट्रिंग के आउटपुट से कैरिज रिटर्न कैसे निकालें?

यह ठीक काम करता है जब तक कि कस्टम-फ़ील्ड में कोई HTML नहीं है जो स्क्रिप्ट को तोड़ देता है।
मैंने htmlspcialchar और htmlentities को देखा लेकिन सब कुछ पट्टी करने के बजाय मैं इसे बचाना चाहता हूं, इसलिए यह अभी भी काम करता है और एचटीएमएल बरकरार है। कोई सुझाव? मैं PHP के लिए काफी नया हूं और वास्तव में किसी भी पॉइंटर्स की सराहना करता हूं।

थोड़ी देर के बाद भी मैं इसके लिए एक अच्छा समाधान खोजने में असमर्थ हूं। TheDeadMedic ने सुझाव दिया कि मैं esc_js

का उपयोग करता हूं लेकिन यह इसे प्रस्तुत करने के बजाय सभी वास्तविक HTML कोड मुद्रित करता है।

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

मैंने कोशिश की कुछ और ट्रिम फ़ंक्शन का उपयोग करना था .. यह वह जगह है जहां मैं अब तक हूं जहां यह आउटपुट में कोई भी \ r नहीं है। कैसे मैं इस बंद खींच सकते हैं पर वहाँ बाहर किसी भी अन्य विचारों

<?php $post_id = 207; // Wordpress Post ID 
$my_post = get_post($post_id); 
$mapTitle = $my_post->post_title; 
$mapIMG = get_post_meta($post_id, 'mapImage', true); 
$snip = get_post_meta($post_id, 'mapExcerpt', true); 
$lat = get_post_meta($post_id, 'lat', true); 
$long = get_post_meta($post_id, 'long', true); 
$pass_to = '<div class="span-8"><div class="mapTitle">'.$mapTitle.'</div><div class="mapContent">'.$snip.'</div></div>'; 
$trimmed = trim($pass_to, " \r."); 
?> 
var point = new GLatLng('<?php echo $lat; $lat; ?>','<?php echo $long; $long; ?>'); 
var marker = createMarker(point,"<?php echo $mapTitle; $mapTitle; ?>", '<?php echo addslashes($trimmed); ?>'); 
map.addOverlay(marker); 

: $ स्निप स्ट्रिंग, mapExcerpt क्षेत्र जहां रिटर्न से आ रहे है?

+0

कस्टम फ़ील्ड में HTML क्यों होगा? – Tom

+0

@Tom लेआउट, लिंक, आदि को नियंत्रित करने के लिए ... – Zac

+0

क्यों न केवल 'लोकेशन' नामक कस्टम फ़ील्ड सेट करें, जहां वे केवल उस लेट/लम्बे इनपुट को जोड़ सकते हैं और लिंक, लेआउट इत्यादि के लिए अन्य कस्टम फ़ील्ड की एक श्रृंखला को परिभाषित कर सकते हैं? – Tom

उत्तर

85

मैं पूरी तरह से अपनी सटीक समस्या समझ में नहीं आता है, लेकिन आपके प्रश्न के शीर्षक का जवाब काफी सरल है:

$snip = str_replace('.', '', $snip); // remove dots 
$snip = str_replace(' ', '', $snip); // remove spaces 
$snip = str_replace("\t", '', $snip); // remove tabs 
$snip = str_replace("\n", '', $snip); // remove new lines 
$snip = str_replace("\r", '', $snip); // remove carriage returns 

या एक सभी में एक समाधान:

$snip = str_replace(array('.', ' ', "\n", "\t", "\r"), '', $snip); 

आप कर सकते हैं भी रेगुलर एक्सप्रेशन का उपयोग:

$snip = preg_replace('~[[:cntrl:]]~', '', $snip); // remove all control chars 
$snip = preg_replace('~[.[:cntrl:]]~', '', $snip); // above + dots 
$snip = preg_replace('~[.[:cntrl:][:space:]]~', '', $snip); // above + spaces 

तुम अब भी उत्पादन के लिए addslashes() का उपयोग करना होगा जावास्क्रिप्ट के अंदर $snip

+0

बहुत बढ़िया !! धन्यवाद। यह टैब भी था और नई लाइनें तोड़ रही थी इसलिए मुझे यह सब चाहिए। धन्यवाद फिर से :) – Zac

1

चूंकि आप इसे जावास्क्रिप्ट में डाल रहे हैं, इसलिए आपको इसे जावास्क्रिप्ट तारों से बचाना होगा। addslashes() चाल करना चाहिए।

+0

बढ़िया! धन्यवाद कि उस समस्या को हल किया .. केवल एक नया खोजने के लिए। अब मैं सीएमएस उत्पन्न करता है कि स्वचालित रिक्त स्थान और लाइन ब्रेक के लिए unterminated स्ट्रिंग अक्षर प्राप्त हो रहा है। – Zac

+1

मेरा उत्तर जांचें - 'addlashes() 'के बजाय WP के PHP फ़ंक्शन' esc_js() 'का उपयोग करें। यह उद्धरण और लाइन ब्रेक को स्वच्छ कर देगा। – TheDeadMedic

1

JSON-एन्कोडिंग का प्रयास करें, मैं हमेशा ऐसा करता हूं जब मैं PHP से जावास्क्रिप्ट में डेटा भेजता हूं। यह न्यूलाइन सहित अधिकांश एन्कोडिंग मुद्दों को हल करता है।

+0

हाँ, मैंने यही सोचा, लेकिन यह सभी मामलों में काम नहीं करता है। मुझे वास्तव में उस सटीक समस्या का सामना करना पड़ रहा है। मैं एक बाहरी एक्सएमएल डेटा स्रोत का उपयोग कर रहा हूं जिसे मैं MySQL में आयात करता हूं और एक्सएमएल में "असामान्य" न्यूलाइन वर्ण होते हैं जो डीबी में सहेजे जाते हैं। क्लाइंट-साइड एंगुलर पर json_encode के माध्यम से पुनर्प्राप्त करते समय एनएल के कारण गिर जाता है। अब तक मुझे उन्हें फ़िल्टर करने का कोई साधन नहीं मिला है। यहां तक ​​कि CTRL वर्णों के सेट को कम करने के लिए ASCII में कनवर्ट करने का प्रयास किया - कुछ भी काम नहीं किया –

1

WP का अपना esc_js() का उपयोग करें, जो जावास्क्रिप्ट तारों के लिए उद्धरण और रेखा ब्रेक से बच जाएगा।

+0

हम्म जब मैंने कोशिश की तो यह वास्तविक HTML कोड को प्रस्तुत करने के बजाय थूक गया। हो सकता है कि मैंने इसे कैसे कार्यान्वित किया? मेरी मूल पोस्ट में जोड़कर मैंने यह कोशिश की: var marker = createMarker (बिंदु, "", '') – Zac

+0

आप क्या ' ऐसा लगता है ठीक है - 'createMarker' फ़ंक्शन के लिए कोड क्या है? – TheDeadMedic

+0

फ़ंक्शन createMarker (बिंदु, नाम, एचटीएमएल) { var marker = नया जीएमकर (बिंदु, {आइकन: myIcon}); var linkid = "link" + (gmarkers.length); GEvent.addListener (मार्कर, "क्लिक करें", फ़ंक्शन() { marker.openInfoWindowHtml (एचटीएमएल); lastlinkid = linkid; }); रिटर्न मार्कर; } – Zac

10

मैं हमेशा इस का उपयोग परेशान कैरिएज रिटर्न से छुटकारा पाने के:

$string = str_replace("\r\n", "\n", $string); // windows -> unix 
$string = str_replace("\r", "\n", $string); // remaining -> unix 
1

यह केवल एक चीज समाधान है कि मेरे लिए काम किया था:

$dataWithoutCarrierReturn = preg_replace('/[\x0D]/', '', $inData); 
+0

अच्छा जवाब! यह मेरे लिए एकमात्र कामकाजी समाधान था, जो एक सीएसवी फ़ाइल में डेटा निर्यात करने के लिए बनाई गई एक PHP स्क्रिप्ट में उपयोग किया जाता था ... धन्यवाद – LoicTheAztec

1

आप की नई लाइन प्रतीकों को दूर करने की जरूरत है सभी प्रकार (utf8 में)

$dataWithoutCarrierReturn = preg_replace('/\R/', '', $inData); 
संबंधित मुद्दे