如何从字符串输出中删除回车符?
Posted
技术标签:
【中文标题】如何从字符串输出中删除回车符?【英文标题】:How to remove carriage returns from output of string? 【发布时间】:2011-03-04 19:09:32 【问题描述】:我将 wordpress 用作 CMS,并尝试允许输入用户字段以填充 Google 地图脚本中的信息窗口。我正在使用它来选择 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);
关于如何实现这一点还有其他想法吗?
【问题讨论】:
自定义字段为什么会有HTML? @Tom 控制布局、链接等... 为什么不只是设置一个名为“位置”的自定义字段,他们只能输入纬度/经度并为链接、布局等定义一系列其他自定义字段? 我确实有,我只是没有把那部分放在这里,因为这不是问题。此自定义字段包含 html 的原因是因为它出现在为标记点弹出的信息气泡中。我有另一个自定义字段,仅适用于有效的样式图像,但是带有文本的这个字段有点问题。只要没有 \r 它就可以很好地工作,但是任何回车都会杀死它。 我更新了我的问题以显示更多代码。希望现在更有意义 【参考方案1】:我不完全理解你的确切问题,但你的问题标题的答案很简单:
$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
。
【讨论】:
太棒了!谢谢你。它也是制表符和新行打破它,所以我需要所有这些。再次感谢:) 删除所有空格字符:preg_replace('/\s/', ''. $str)
【参考方案2】:
我总是用它来摆脱讨厌的回车:
$string = str_replace("\r\n", "\n", $string); // windows -> unix
$string = str_replace("\r", "\n", $string); // remaining -> unix
【讨论】:
【参考方案3】:如果您需要删除所有类型的换行符(在 utf8 中)
$dataWithoutCarrierReturn = preg_replace('/\R/', '', $inData);
【讨论】:
【参考方案4】:由于您将其放入 Javascript 中,因此您需要将其转义为 javascript 字符串。 addslashes()
应该可以解决问题。
【讨论】:
太棒了!谢谢解决了这个问题..只是发现了一个新问题。现在我得到了 CMS 生成的自动空格和换行符的未终止字符串文字。 检查我的答案 - 使用 WP 的 PHP 函数esc_js()
而不是 addslashes()
。它将清理引号和换行符。【参考方案5】:
尝试对其进行 JSON 编码,当我将数据从 PHP 发送到 Javascript 时,我总是这样做。它解决了大多数编码问题,包括换行符。
【讨论】:
是的,这就是我的想法,但并非在所有情况下都有效。我实际上面临着这个确切的问题。我正在使用导入 mysql 的外部 XML 数据源,并且 XML 具有保存在数据库中的“不寻常”换行符。当通过客户端 Angular 上的 json_encode 检索时,由于 NL 的原因而失败。到目前为止,我找不到过滤它们的方法。甚至尝试转换为 ASCII 以最小化 CTRL 字符集 - 没有任何效果【参考方案6】:使用 WP 自己的esc_js()
,它将转义 JavaScript 字符串的引号和换行符。
【讨论】:
嗯,当我尝试这个时,它会吐出实际的 html 代码而不是渲染它。也许这就是我实现它的方式?添加到我原来的帖子我试过这个: var marker = createMarker(point,"", '') 你在做什么似乎没问题 -createMarker
函数的代码是什么?
函数 createMarker(point,name,html) var marker = new GMarker(point,icon:myIcon); var linkid = "链接"+(gmarkers.length); GEvent.addListener(marker, "click", function() marker.openInfoWindowHtml(html); lastlinkid=linkid; );返回标记; 【参考方案7】:
这是唯一对我有用的解决方案:
$dataWithoutCarrierReturn = preg_replace('/[\x0D]/', '', $inData);
【讨论】:
好答案!这也是我唯一可行的解决方案,用于将数据导出到 CSV 文件的 php 脚本中......谢谢以上是关于如何从字符串输出中删除回车符?的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用strip函数将dataframe所有数据列名称中的空格(空格回车符制表符)字符删除