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

2022-08-30 12:18:36

我正在使用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);

关于我如何做到这一点的任何其他想法?


答案 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

你仍然需要在Javascript中用于输出。addslashes()$snip


答案 2

我总是用它来摆脱讨厌的回车符:

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