Как убрать возврат каретки с вывода строки? - PullRequest
26 голосов
/ 17 июня 2010

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

Работает нормально, если в настраиваемом поле нет 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);

Есть еще какие-нибудь идеи о том, как я могу это осуществить?

Ответы [ 7 ]

105 голосов
/ 29 августа 2010

Я не совсем понимаю вашу точную проблему, но ответ на заголовок вашего вопроса довольно прост:

$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.

10 голосов
/ 29 августа 2010

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

$string = str_replace("\r\n", "\n", $string); // windows -> unix
$string = str_replace("\r", "\n", $string);   // remaining -> unix
3 голосов
/ 11 мая 2017

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

$dataWithoutCarrierReturn = preg_replace('/\R/', '', $inData);
1 голос
/ 01 июля 2016

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

$dataWithoutCarrierReturn = preg_replace('/[\x0D]/', '', $inData);
1 голос
/ 17 июня 2010

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

1 голос
/ 17 июня 2010

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

1 голос
/ 17 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...