如何从字符串输出中删除回车符?

问题描述:

我正在使用wordpress作为CMS,并试图允许输入用户字段来填充Google Map脚本中的信息窗口。我正在使用它来选择ID并从自定义字段中提取内容。如何从字符串输出中删除回车符?

它工作正常,除非有自定义字段中的任何html中断脚本。
我看着htmlspcialchar和htmlentities,而不是去掉所有东西,我想让它逃脱,所以它仍然有效,并且html完好无损。有什么建议么?我对PHP很新,并且非常感谢任何指针。

过了一段时间,我仍然无法找到一个很好的解决方案。 TheDeadMedic建议我使用esc_js

但打印所有实际的html代码而不是渲染它。

非常感谢nickfs,因为该解决方案稍微好一些,但如果输出中有回车符,脚本仍然会中断,这对于CMS来说并不那么好。

我试过的其他东西是使用修剪功能..这是我现在在哪里工作,只要输出中没有\ r。 $ 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); 

有没有其他的想法可以解决这个问题?

+0

为什么在自定义字段中会有HTML? – Tom 2010-08-25 13:47:00

+0

@Tom控制布局,链接等... – Zac 2010-08-27 03:43:01

+0

为什么不设置一个名为“位置”的自定义字段,他们只能输入该纬度/长度并为链接,布局等定义一系列其他自定义字段? – Tom 2010-08-27 06:32:52

我不完全理解您的具体问题,但回答你的问题的题目很简单:

$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

+0

真棒!谢谢。这也是制表符和新行打破它,所以我需要所有这一切。再次感谢:) – Zac 2010-08-31 07:06:31

既然你把它放到Javascript中,你需要为javascript字符串转义它。 addslashes()应该做的伎俩。

+0

太棒了!感谢那解决了那个问题..只为了发现一个新的。现在我得到了CMS生成的自动空格和换行符的未终止字符串文字。 – Zac 2010-06-17 06:10:49

+1

检查我的答案 - 使用WP的PHP函数'esc_js()'而不是'addslashes()'。它将消除报价和换行符。 – TheDeadMedic 2010-06-17 10:15:50

尝试JSON编码它,我总是这样做,当我发送数据从PHP到Javascript。它解决了大多数编码问题,包括换行符。

+0

是的,这就是我的想法,但它并不适用于所有情况。我实际上正面临着这个确切的问题。我正在使用一个外部XML数据源,我将其导入到MySQL中,并且XML具有保存在数据库中的“不寻常”的换行符。在客户端Angular上通过json_encode进行检索时,由于NL的缘故,会摔倒。到目前为止,我找不到过滤它们的方法。即使试图转换为ASCII来最小化CTRL字符集 - 没有任何工作 – 2015-02-06 00:20:04

使用WP自己的esc_js(),它将为JavaScript字符串转义引号和换行符。

+0

嗯,当我试着这个它吐出实际的HTML代码,而不是渲染它。也许这是我如何实现它?添加到我原来的帖子我试过这个:var marker = createMarker(point,“”,'') – Zac 2010-06-18 05:59:17

+0

What'重做似乎没问题 - createMarker函数的代码是什么? – TheDeadMedic 2010-06-18 11:24:15

+0

函数createMarker(point,name,html)var marker = new GMarker(point,{icon:myIcon}); var linkid =“link”+(gmarkers.length); GEvent.addListener(marker,“click”,function(){ marker.openInfoWindowHtml(html); lastlinkid = linkid; }); return marker; } – Zac 2010-06-21 06:56:06

我总是用这个来摆脱讨厌的回车的:

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

这是唯一的解决方案,为我工作:

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

很好的答案!这也是我唯一的工作解决方案,用于将数据导出到CSV文件的php脚本中......谢谢 – LoicTheAztec 2017-02-26 15:34:13

,如果你需要删除的新线符号所有类型(以utf8)

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