web-dev-qa-db-ja.com

PHPで特殊文字を表示する方法

これは何度も聞かれましたが、良い解像度ではありませんでした。私は次の文字列を持っています:

_$string = "<p>Résumé</p>";
_

文字列を印刷またはエコーしたいのですが、出力は_<p>R�sum�</p>_を返します。そこで、htmlspecialchars()またはhtmlentities()を試して、_&lt;p&gt;R&eacute;sum&eacute;&lt;p&gt;_を出力し、ブラウザが_&lt;p&gt;R&eacute;sum&eacute;&lt;p&gt;_をレンダリングします。私は明らかに、これをレンダリングしたいです:

履歴書

そして、私はUTF-8を使用しています:

_header("Content-type: text/html; charset=UTF-8");
_

ここに何が欠けていますか?なぜ特殊文字のエコーと印刷出力が__を出力するのですか?明確にするために、文字列は実際にはデータベースに保存されたHTMLファイル全体です。実際のアプリケーションは、1つの小さなラインだけではありません。

12
Phil Tune

テーブルを叩きながら、この問題を抱えていた可能性のある他の人に投稿したい問題について、もう少し理解を深めました。

UTF-8文字セットはクライアント上で特殊文字を表示しますが、サーバーはそれほど収容されず、àèなどの特殊文字をおよびとして出力します。

サーバーがそれらを正しく印刷するために、ISO-8859-1文字セットを使用します。

<?php
    /*Just for your server-side code*/
    header('Content-Type: text/html; charset=ISO-8859-1');
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"><!-- Your HTML file can still use UTF-8-->
        <title>Untitled Document</title>
    </head>
    <body>
        <?= "àè" ?>
    </body>
</html>

これは正しく印刷されます:àè


編集(4年後):

もう少し理解が深まりました。これが機能する理由は、クライアント(ブラウザ)が応答header()を介してISO-8859-1 text/htmlファイルを期待するように指示されているためです。 (他の人が言及したように、.iniまたは.htaccessファイルを更新することでもこれを行うことができます。)Then、ブラウザがその特定のファイルをDOMに解析し始めると、出力は<meta charset="">ルールに従いますISO文字をそのまま保持します。

37
Phil Tune

PHPとHTMLをPHPファイル...のように組み合わせて...

<?php
$string = htmlentities("Résumé");
?>

<html>
<head></head>
<body>
<p><?= $string ?></p>
</body>
</html>

Résuméが出力されるはずです。

短いタグを有効にしていない場合は、<?= $string ?><?php echo $string; ?>に置き換えてください

2
Justin Wood

PHPでは、この問題を解決するためのかなり良い関数utf8_encode()があります。

echo utf8_encode("Résumé");

//will output Résumé instead of R�sum�

公式PHPページを確認してください。

1
Vikas Kandari

$ str = "あなたの名前はO\'vins?";

//出力:あなたの名前はO'vinsですか? echo stripslashes($ str);

0
Vincy Oommen

最近、同様の問題が発生したときに次のように機能しました。

$str = iconv('iso-8859-15', 'utf-8', $str);
0
seantunwin

これは私のために動作します。 HTMLの開始前にこれを試してください。それがあなたにも役立つことを願っています。

<?php header('Content-Type: text/html; charset=iso-8859-15'); ?>
<!DOCTYPE html>

<html lang="en-US">
<head>
0

これは私のために働く:

次の行で.htaccessファイルを作成/編集します。

AddDefaultCharset UTF-8
AddCharset UTF-8 .php

php.iniを作成/編集する場合:

default_charset = "utf-8"

ソース:

0
quantme

これを試して

入力:

<!DOCTYPE html>
<html>
<body>

<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>

<p>Converting &lt; and &gt; into entities are often used to prevent browsers from using it as an HTML element. <br />This can be especially useful to prevent code from running when users have access to display input on your homepage.</p>

</body>
</html>

出力:

This is some <b>bold</b> text.

Converting < and > into entities are often used to prevent browsers from using it as an HTML element. This can be especially useful to prevent code from running when users have access to display input on your homepage.
0
Milan Gajjar