2011-07-07 6 views
1

私のメインサイトのスクリプトの一部ではないブログがあります。私はブログのタイトル、サムネイル画像、抜粋だけをフロントページに入れました。しかし、ブログのテキストにアポストロフィやそれに類するものがあると、蹴飛ばされたテキストはフロントエンドで壊れてしまい、アポストロフィの代わりに奇妙な文字が表示されます。私はこれを修正する方法について、高低を捜し求めましたが、空になってきました。Wordpressループからthe_excerpt()の文字をエスケープする方法

私はesc_html()関数を使用する必要がありますが、私はthe_excerptでそれを行う方法がわかりません。私は間違いなくPHPの男です。

私はこのコードを持っている:

<?php while (have_posts()): the_post(); ?> 
<h3><?php the_title(); ?></h3> 
<img style="float: left; padding: 13px 20px 0px 0px;" src="<? echo catch_that_image(); ?>" width="100"> 
<?php the_excerpt(); ?> 
<p><a href="<?php the_permalink(); ?>">Read more...</a></p> 
<?php endwhile; ?> 

誰もが抜粋のテキストは、変な文字とアポストロフィと引用符を交換していないどのようにこの問題を解決するのは知っていますか?

答えて

3

the_excerptは、コンテンツを直接出力します。代わりにget_the_excerptを使用して内容を返し、変数に入れてください。またはesc_htmlにしてください。

<?php echo esc_html(get_the_excerpt()); ?> 

the_X()の形式のほとんどのWordpress関数では、get_the_X()も存在します。

つまり、the_excerpt()は通常、有効な出力を生成するため、サイトとWordpressの間の文字セットが一致しているかどうかを確認する必要があります。つまり、あなたのサイトのページはutf-8として提供されるはずです。

+0

私はダンスキャップを今すぐ持っていきます。私はちょうどJSONオブジェクトのWordPress PHP文字列をエスケープする方法を見つけようと1時間を費やし、PHPでエスケープする必要があることを認識しました。 これで私はおそらく私に恋人のビンへの旅行を救ったでしょう。 – Imperative

0

あなたは、各ページのヘッダーで同じ文字セットエンコーディングで作業している?:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

または非Wordpressのページにブログのヘッダーを呼び出す?確かに

<?php require('/the/path/to/your/wp-blog-header.php'); ?> 

再:http://codex.wordpress.org/Integrating_WordPress_with_Your_Website

1

何それは、一般的に意味することは、ワードプレスは、自身の他のバージョン(「スマート引用符」で特定の文字を置換している間あなたは、UTF-8以外のものとしてページを提供しているということです)をUTF-8で使用します。また、奇妙なエンコーディングでテキストをコピーしてポストに貼り付けるときにも起こります。 Microsoft Wordは、すべての見積もりを独自のエンコーディングで縮尺に変換するのが好きなので、その共通ソースです。コピーして貼り付けた場合は、最初に書式設定していない場所(メモ帳は良い)に貼り付けて、そこから再コピーしてみてください。それ以外の場合は、WordPressを修正する必要があります。それはあなたがここに欲しいと思うesc_htmlではないことに注意してください - それはあなたに別の問題のセットを与えるだけです。

ここには2つのアプローチがあります:最初の、そして最も良いのは、適切なエンコーディングでページを提供していることを確認することです。ブラウザのデバッグ機能(「ページ情報」、またはFirebugまたはWeb Inspectorのネットワークパネル)を使用して確認するか、W3 validatorでページを実行してオンラインで簡単に行うことができます。結果ページのエンコーディングが表示されます。 UTF-8でない場合、問題があります。おそらくページの上に表示されるように、自分でページを生成しているのであれば、PHPで直接修正することができます:

<?php header("Content-type: text/html; charset=UTF-8");?> 

WordPressのライブラリコードは通常、それ自体で動作しますので、うまく動作しない可能性があります。一部のサーバーは、その方法をオーバーライドできないように設定されています。この場合、使用するサーバーによって構成が異なります。 Apacheの場合、それを行う方法の1つとして、AddDefaultCharsetのドキュメントを参照してください。 サーバーが設定を上書きしないように設定されているか、そのエンコーディングを望んでいないように設定されている可能性があります。この場合、オプション2が必要です。

最初のオプションが利用できない場合、またはそうしない場合は、別のオプションがあります。 WordPressにこれらの置き換えを行わないよう強制することができます。ワードプレスのwptexturize()関数は、その変換を行います。これはthe_excerptのフィルタチェーンの一部として適用されます。あなたはこのPHPコードでフィルタチェーンから削除することができます:

<?php remove_filter("the_excerpt", "wptexturize"); ?> 

あなたのテーマや基本的なプラグインへのfunctions.phpにそれを置くことができますが、あなたのためにそれを行う可能なプラグインもあります。wpuntexturizeどこでもスマートな文字変換を無効にします。それは物事を少し醜いものに見せかけますが、すべてがうまくいくはずです。

WordPressのフィルタシステムを使用して、問題の文字に対して小さな逆変換を適用することもできます。このような何か:プラグインや彼らのプレーンASCII同等物にスマート引用符やダッシュをuntransformますのfunctions.phpで

function local_fix_quotes($in) { 
    $in = str_replace("&#8220;", '"', $in); 
    $in = str_replace("&#8221;", '"', $in); 
    $in = str_replace("&#8217;", "'", $in); 
    $in = str_replace("&#8216;", "'", $in); 
    $in = str_replace("&#8211;", "-", $in); 
    $in = str_replace("&#8230;", "...", $in); 
    $in = str_replace("\xC2\xA0",' ',$in); 
    $in = str_replace("\xE2\x80\x99","'",$in); 
    $in = str_replace("\xE2\x80\x9C",'"',$in); 
    $in = str_replace("\xE2\x80\x9D",'"',$in); 
    $in = str_replace("\xE2\x80\x93",'-',$in); 
    return $in; 
} 
add_filter("the_excerpt", "local_fix_quotes"); 

これらのコードオプションは、WordPressのライブラリコードをインクルードした後であれば、WordPress以外で生成することができます。そうするときは、他のコード出力の前に、ページの上部にwp-blog-headerを置く必要があります。ページがすでに出力を開始している場合、WordPressはすでに送信されているエンコーディングを変更することはできません。 WP-ブログヘッダーがページの上部に必要とされなかった場合は、

<?php 
define('WP_USE_THEMES', false); 
require_once('./wp-blog-header.php'); 
remove_filter("the_excerpt", "wptexturize"); 
?> 
<html> 

必ずそれがそこに最初のmakeと問題が解決するかどうかを参照してください。ページの上部には、次のようになります。あなたのページが意図的に別のエンコーディングを持っていればそれほど重要ではなく、文字の置換を無関係にすることはできません。 WordPressで生成されたページでは、プラグインのアプローチがその場合に最適です。

+0

あなたの解決策は有効でした。文字セットはPHPサイトではISO-8859-1でしたので、UTF-8に変更しキャラクターの問題は解決しました。私は私のメインサイトの文字セットを変更することに関連する問題は見ていません。私はそれをすることで何かをねじっていないことを願っています。応答する時間をとっていただきありがとうございます。 – Dirigible

関連する問題