簡體   English   中英

如何從字符串輸出中刪除回車符?

[英]How to remove carriage returns from output of string?

我使用wordpress作為CMS並嘗試輸入用戶字段以填充Google Map腳本中的信息窗口。 我使用它來選擇id並從自定義字段中提取內容。

除非自定義字段中有任何打破腳本的html,否則它可以正常工作。
我看了htmlspcialchar和htmlentities,但不是剝離一切我想讓它逃脫所以它仍然有效,並且html完好無損。 有什么建議? 我是PHP的新手,非常感謝任何指針。

過了一段時間,我仍然無法找到一個很好的解決方案。 TheDeadMedic建議我使用esc_js

但是那打印了所有實際的html代碼而不是渲染它。

感謝nickfs,因為該解決方案略勝一籌,但如果輸出中有任何回車符,腳本仍然會中斷,這對CMS來說不是那么好。

我試過的其他東西就是使用trim函數..這就是我現在所處的位置,只要輸出中沒有\\ r \\ n就可以工作。 $ snip字符串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);

關於如何解決這個問題的任何其他想法?

我不完全理解您的確切問題,但問題標題的答案很簡單:

$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()在Javascript中輸出$snip

我總是用它來擺脫討厭的回車:

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

如果你需要刪除所有類型的新行符號(在utf8中)

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

既然你把它放到Javascript中,你需要為javascript字符串轉義它。 addslashes()應該可以解決問題。

嘗試對它進行JSON編碼,當我將數據從PHP發送到Javascript時,我總是這樣做。 它解決了大多數編碼問題,包括換行符。

使用WP自己的esc_js() ,它將轉義JavaScript字符串的引號和換行符。

這是唯一對我有用的解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM