繁体   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