php स्ट्रिंग के आउटपुट से कैरिज रिटर्न कैसे निकालें?



javascript wordpress (6)

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

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

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

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

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

मैंने कोशिश की कुछ और ट्रिम फ़ंक्शन का उपयोग करना था .. यह वह जगह है जहां मैं अब वहां हूं जहां यह आउटपुट में \ r r तक काम करता है। $ स्निप स्ट्रिंग, mapExcerpt फ़ील्ड वह है जहां रिटर्न आ रहे हैं:

<?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);

इस बारे में कोई अन्य विचार है कि मैं इसे कैसे खींच सकता हूं?


Answer #1

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


Answer #2

यदि आपको सभी प्रकार के नए लाइन प्रतीकों को हटाने की आवश्यकता है (utf8 में)

$dataWithoutCarrierReturn = preg_replace('/\R/', '', $inData);

Answer #3

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


Answer #4

यह एकमात्र चीज समाधान था जो मेरे लिए काम करता था:

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

Answer #5

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

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

Answer #6

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

$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

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





google-maps