Как отображать специальные символы в 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-файл, хранящийся в базе данных. Приложение реального мира – это не только одна небольшая строка.

Solutions Collecting From Web of "Как отображать специальные символы в PHP"

После долгих ударов по голове, я немного лучше понял вопрос, который я хотел опубликовать для всех, у кого могла быть эта проблема.

В то время как набор символов 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() ответа header() , чтобы ожидать текстовый / html-файл ISO-8859-1 . (Как упоминалось выше, вы также можете это сделать, обновив файлы .ini или .htaccess .) Затем , как только браузер начнет разбирать данный файл в DOM, вывод будет подчиняться любому правилу <meta charset=""> но сохраняйте символы ISO в такт.

У вас может быть сочетание PHP и HTML в ваших PHP-файлах … просто сделайте что-нибудь подобное …

 <?php $string = htmlentities("Résumé"); ?> <html> <head></head> <body> <p><?= $string ?></p> </body> </html> 

Это должно выводить Résumé именно так, как вы этого хотите.

Если вы не используете короткие теги, замените <?= $string ?> <?php echo $string; ?> <?php echo $string; ?>

Поэтому я пытаюсь htmlspecialchars () или htmlentities (), который выводит <p> Résumé <p>, а браузер отображает <p> Résumé <p>.

Если у вас есть работа, где он отображает Résumé с тегами <p></p> вокруг него, просто не конвертируйте абзац, а только свою строку. Затем абзац будет отображаться как HTML, и ваша строка будет отображаться внутри.

$ str = "Ваше имя O \ 'vins?";

// Вывод: Ваше имя O'vins? echo stripslashes ($ str);

Это работает для меня:

Создайте / отредактируйте файл .htaccess с этими строками:

 AddDefaultCharset UTF-8 AddCharset UTF-8 .php 

Если вы предпочитаете создавать / редактировать php.ini :

 default_charset = "utf-8" 

Источники:

Попробуй это

Входные данные:

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

Это работает для меня. Попробуйте это до начала HTML. Надеюсь, это сработает и для вас.

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