Проблемы с кодировкой

12
chemax
На сайте с 07.01.2009
Offline
206
923

вот такая фигня выходит на сайте. при добавлении материала я его прогоняю через функцию

$bla=htmlspecialchars($bla, ENT_QUOTES);

все норм работает но с некоторыми языками ерунда получается

например текст

Cae la lluvia en mн
se hace de noche al fin

выводит так

Cae la lluvia en m& #237;
se hace de noche al fin
Качественный хостинг, VPS и сервера. (http://ihc.ru/?ref=569)
[Удален]
#1

Дело точно не в htmlspecialchars. Она преобразует всего 5 символов


Производятся следующие преобразования:

'&' (амперсанд) преобразуется в '&'

'"' (двойная кавычка) преобразуется в '"' when ENT_NOQUOTES is not set.

''' (одиночная кавычка) преобразуется в ''' только в режиме ENT_QUOTES.

'<' (знак "меньше чем") преобразуется в '&lt;'

'>' (знак "больше чем") преобразуется в '&gt;'

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

Можете еще воспользоваться функцией get_html_translation_table а потом подсунуть её например функции strtr - чтобы убедиться что дело точно не в htmlspecialchars

chemax
На сайте с 07.01.2009
Offline
206
#2

дело в htmlspecialchars. текст на испанском языке заменяется.

[Удален]
#3

ну напишите свой htmlspecialchars делов то


$text=str_replace(
array("&","<",">","\"","'"),
array("&amp;","&lt;","&gt;","&quot;","'"),
$text);
chemax
На сайте с 07.01.2009
Offline
206
#4
neolord:
ну напишите свой htmlspecialchars делов то

$text=str_replace(
array("&","<",">","\"","'"),
array("&amp;","&lt;","&gt;","&quot;","'"),
$text);

то же самое)

[Удален]
#5

Ну тогда значит ваш сервер не работает с кодировкой, в которой находится строка, либо вы её выводите в кодировке, отличной от кодировки всей страницы. Если у вас там очень много всяких языков, юзайте 16битные кодировки, если только испанский, установите локаль соответствующую с кодировкой UTF-8

chemax
На сайте с 07.01.2009
Offline
206
#6
neolord:
Ну тогда значит ваш сервер не работает с кодировкой, в которой находится строка, либо вы её выводите в кодировке, отличной от кодировки всей страницы. Если у вас там очень много всяких языков, юзайте 16битные кодировки, если только испанский, установите локаль соответствующую с кодировкой UTF-8

а если поподробнее про 16битные?

chemax добавил 25.05.2009 в 17:26

без htmlspecialchars незнаю просто как защитить более форму от html кодов

dkameleon
На сайте с 09.12.2005
Offline
386
#7
chemax:
выводит так

вы случаем не обрабатываете текст дважды?

что в коде страницы?

посмотреть вживую можно?

Дизайн интерьера (http://balabukha.com/)
chemax
На сайте с 07.01.2009
Offline
206
#8

if(isset($_POST['goreg']))

{
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
{
if(empty($_POST['artist']) or empty($_POST['name']) or empty($_POST['text']))
{
@header("location: ".$_SERVER['PHP_SELF']."");
}
else
{
$name = trim($_POST['name']);
$artist = trim($_POST['artist']);
$soundtrack = trim($_POST['soundtrack']);
$album = trim($_POST['album']);
$text = $_POST['text'];
$translate = $_POST['translate'];
$user_name = trim($_POST['user_name']);

$name=htmlspecialchars($name, ENT_QUOTES);
$artist=str_replace(
array("&","<",">","\"","'"),
array("&amp;","&lt;","&gt;","&quot;","'"),
$artist);
$soundtrack=str_replace(
array("&","<",">","\"","'"),
array("&amp;","&lt;","&gt;","&quot;","'"),
$soundtrack);
$album=str_replace(
array("&","<",">","\"","'"),
array("&amp;","&lt;","&gt;","&quot;","'"),
$album);
$text=str_replace(
array("&","<",">","\"","'"),
array("&amp;","&lt;","&gt;","&quot;","'"),
$text);
$translate=str_replace(
array("&","<",">","\"","'"),
array("&amp;","&lt;","&gt;","&quot;","'"),
$translate);
$user_name=htmlspecialchars($user_name, ENT_QUOTES);

дальше идут запросы.

http://all-lyrics.ru/add.php - вот эта страница глючит

http://all-lyrics.ru/text66390.html - вот текст сглюченный.

http://www.lyricstime.com/petra-berger-eres-todo-para-m-lyrics.html вот нормальный текст

dvaes
На сайте с 03.09.2007
Offline
65
#9

ну как я понимаю там еще до функции htmlspecialchars такой текст приходит. попробуйте перед htmlspecialchars сделать над текстом preg_replace("'&#(\d+);'e", "chr(\\1)", $text);

DyaDya
На сайте с 11.04.2007
Offline
147
#10

Просто у вас проблема именно в кодировке, а не в функции хтмлспешиалчарс!

Судя по всему, в базе данные хранятся в одной кодировке, а на сайт выдаются в другой.

Недавно была схожая проблема у одного клиента. Буквы ш, е и т.п. показывались неправильно, а при прогоне через хтмлспешиалчарс эти неправильные символы тоже сущностями заменялись!

Сайт был в UTF, к базе подключение задавалось в cp1251 (! при этом почти всё нормально на сайте отображалось, ну не считая нескольких букв, которые были нечитаемы) ).

Т.е. выход такой: все данные конвертите в UTF, особенно в базе. И типы полей у таблиц тоже пропишите как UTF, если вдруг где-то проскакивает cp1251 или какая нидь испанская кодировка.

Моё имхо. А там уж точно не знаю, что ещё у вас может быть.

Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий