Как удалить возврат каретки с вывода строки?

Я использую wordpress в качестве CMS и пытаюсь ввести поля пользователя для заполнения информационных окон в сценарии Google Map. Я использую это, чтобы выбрать идентификатор и вытащить содержимое из настраиваемого поля.

Он отлично работает, если в пользовательском поле отсутствует какой-либо html, который разбивает скрипт.
Я посмотрел на htmlspcialchar и htmlentities, но вместо того, чтобы вырезать все, я бы хотел, чтобы он сбежал, так что он все еще работает, и html не поврежден. Какие-либо предложения? Я довольно новичок в PHP и очень ценю любые указатели.

Через некоторое время я все еще не могу найти отличное решение для этого. TheDeadMedic предложил использовать esc_js

но это напечатало весь фактический html-код вместо его рендеринга.

Спасибо nickfs, поскольку это решение было немного лучше, но сценарий все еще ломается, если в выходе есть какие-либо возвраты каретки, что делает это не очень хорошим для CMS.

Что-то еще, что я пробовал, – это использовать функцию обрезки. Здесь я нахожусь там, где он работает до тех пор, пока на выходе не будет. Строка $ 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() для вывода $snip внутри Javascript.

Я всегда использую это, чтобы избавиться от досадных возвратов каретки:

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

Поскольку вы помещаете это в Javascript, вам нужно избегать его для строк javascript. addslashes() должен делать трюк.

Попробуйте JSON-кодирование, я всегда это делаю, когда отправляю данные с PHP на Javascript. Он решает большинство проблем с кодировкой, включая новые строки.

Используйте собственный esc_js() WP, который будет избегать кавычек и разрывов строк для строк JavaScript.

Это единственное решение, которое работало для меня:

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

если вам нужно удалить новые строковые символы всех типов (в utf8)

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