Помочь избавиться от специальных символов HTML в базе данных
Я перенес свой сайт из CMS Interspire в Joomla! CMS. Мне удалось перенести всю базу данных статей, но у некоторых из них есть странная проблема - когда я захожу на страницу из joomla, заголовок содержит HTML-сущности, такие как ’
,
Как вы можете догадаться из CMS, которые я использую, я полагаюсь на PHP как на свою серверную сторону, а MySql - на свою базу данных.
Я попытался просмотреть заголовки статей в базе данных с помощью htmlspecialchars_decode
А ТАКЖЕ html_entity_decode
для того, чтобы избавиться от них, но это не имело никакого эффекта.
если я просто возьму пример из БД и повторю его, все будет в порядке: каково ваше удовольствие, лазанья или пицца в манчестерском стиле?
если я перейду на страницу статьи в Joomla, это будет выглядеть так:What’s Your Pleasure, Lasagna Or Pizza Manchester Style?
Когда я захожу в PhpMyAdmin, чтобы непосредственно увидеть, что находится в базе данных, это содержимое заголовка:What’s Your Pleasure, Lasagna Or Pizza Manchester Style?
Я даже попытался удалить символ с помощью:
str_replace("’","",$title);
или заменить это так
str_replace('’',"'",$title);
но ничего. Когда я попытался закодировать это снова вместо того, чтобы декодировать это (только, чтобы видеть, я нахожусь в правильной БД), это работало и закодировало это снова...
Пожалуйста, я был бы рад новым идеям... Спасибо, Янипан
3 ответа
Попробуйте установить кодировку на cp1252. Это сработало для меня:
$decoded = html_entity_decode($your_string, ENT_QUOTES, 'cp1252');
Вероятно, вам лучше всего искать и заменять в самой базе данных, а не пытаться делать это с помощью php. Поиск и замена в mysql делается так:
update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);
Так что ваш должен выглядеть примерно так:
update ARTICLES set TITLE = replace(TITLE, '’', '\'');
Дайте этому шанс.
Нужно больше информации
- Какая кодировка символов в вашей базе данных? Тот
&
или же;
может быть чем-то отличным от типичного ASCII. - Возможно, что PHP/Joomla дважды кодирует вашу строку. Посмотрите на исходный код страницы браузера и найдите текст в созданном HTML. Вместо
What’s
это может быть просто одно из следующего:What&rsquo&59;s
What&38;rsquo&59;s
What’s