Как удалить возврат каретки с вывода строки?
Я использую wordpress как CMS и пытаюсь ввести поля пользователя для заполнения информационных окон на карте Google script. Я использую это, чтобы выбрать идентификатор и вытащить содержимое из настраиваемого поля.
Он отлично работает, если в пользовательском поле отсутствует какой-либо html, который разбивает script.
Я посмотрел на htmlspcialchar и htmlentities, но вместо того, чтобы вырезать все, я бы хотел, чтобы он сбежал, так что он все еще работает, и html не поврежден. Какие-либо предложения? Я новичок в PHP и очень ценю любые указатели.
Через некоторое время я все еще не могу найти отличное решение для этого. TheDeadMedic предложил использовать esc_js
но напечатал весь фактический html-код вместо рендеринга.
Спасибо, новичок, так как это решение было немного лучше, но script по-прежнему ломается, если в выходе есть какие-либо возвраты каретки, что делает это не очень хорошим для 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
Вам все равно нужно использовать addslashes()
для вывода $snip
внутри Javascript.
Ответ 2
Я всегда использую это, чтобы избавиться от досадных возвратов каретки:
$string = str_replace("\r\n", "\n", $string); // windows -> unix
$string = str_replace("\r", "\n", $string); // remaining -> unix
Ответ 3
Поскольку вы помещаете это в Javascript, вам нужно избежать его для строк javascript. addslashes()
должен сделать трюк.
Ответ 4
Попробуйте JSON-кодирование, я всегда это делаю, когда отправляю данные с PHP на Javascript. Он решает большинство проблем с кодировкой, включая символы новой строки.
Ответ 5
Используйте WP собственный esc_js()
, который будет избегать кавычек и разрывов строк для строк JavaScript.
Ответ 6
Это единственное решение, которое сработало для меня:
$dataWithoutCarrierReturn = preg_replace('/[\x0D]/', '', $inData);
Ответ 7
если вам нужно удалить новые строковые символы всех типов (в utf8)
$dataWithoutCarrierReturn = preg_replace('/\R/', '', $inData);