web-dev-qa-db-ja.com

文字列の出力から改行を削除する方法は?

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);

私はこれをどのように引き出すことができるかについて、他に何かアイデアがありますか?

26
Zac

私はあなたの正確な問題を完全には理解していませんが、あなたの質問のタイトルへの答えは非常に簡単です:

_$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内で_$snip_を出力するには、addslashes()を使用する必要があります。

107
Alix Axel

私はいつもこれを使って厄介な改行を取り除きます:

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

すべてのタイプの新しいラインシンボルを削除する必要がある場合(utf8)

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

JSONエンコードを試してみてください。PHP=からJavascriptにデータを送信するときは常にそうします。改行を含むほとんどのエンコードの問題を解決します。

1
Jan Fabry

これをJavascriptに入れているので、javascript文字列のためにエスケープする必要があります。 addslashes()はトリックを行う必要があります。

1
nickf

WP独自のesc_js()を使用します。これにより、JavaScript文字列の引用符と改行がエスケープされます。

1
TheDeadMedic

これは私のために働いた唯一の解決策でした:

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