Преобразование нестандартного персонажа в стандартную версию

Мне нужно изменить нестандартные символы, такие как , на стандартные, такие как '. Как я могу сделать это в PHP? Сейчас мне просто нужно изменить апостроф, но было бы неплохо знать, как изменить другие, такие как двойные кавычки и тому подобное.


person LordZardeck    schedule 08.01.2012    source источник
comment
Нестандартных персонажей не бывает. Почему вы хотите это сделать?   -  person SLaks    schedule 09.01.2012
comment
Вероятно, вам следует сначала определить, какая кодировка символов вам нужна (UTF-8, ISO-8859-1 и т. д.), а затем определить, какую вы должны предоставлять клиенту.   -  person Jared Farrish    schedule 09.01.2012
comment
@Jared На этот раз это не проблема кодирования. :)   -  person deceze♦    schedule 09.01.2012
comment
@Jared Проблема замены символов, независимо от кодировки.   -  person deceze♦    schedule 09.01.2012
comment
@deceze - я столкнулся с той же проблемой (из-за контента из Word). Я (вручную) заменял его в прошлом, но использование кодировки UTF-8 также оказалось более простым решением проблемы, чем изменение.   -  person Jared Farrish    schedule 09.01.2012
comment
@Jared Вы должны предоставить более подробную информацию об этом исправлении. и ' — это просто два разных символа, которые могут быть закодированы в нескольких разных кодировках. Это не сильно отличается от желания заменить каждую букву А на букву В.   -  person deceze♦    schedule 09.01.2012
comment
@deceze они такие? Я думал, что они оба были апострофом.   -  person LordZardeck    schedule 09.01.2012
comment
@deceze — в содержимом, полученном из Word, совпадает с апострофом, т. е. I didn’t like that. В зависимости от исходного материала вы можете догадаться об этом. Точно так же я не предлагал полностью превратить его в другого персонажа (без присмотра). Просто измените кодировку страницы.   -  person Jared Farrish    schedule 09.01.2012
comment
(Отвечая на удаленный комментарий из OP): - это ПРАВАЯ ОДИНОЧНАЯ КАВАТЫ, ' - это АПОСТРОП (как определено в терминах Unicode). Вы только посмотрите на них, это явно разные персонажи! :)   -  person deceze♦    schedule 09.01.2012
comment
@Jared Это вина Word за (ab) использование неправильного символа. Просто изменение кодировки не должно менять символ, но, может быть, Word подменяет символ, если вы сохраняете его в другой кодировке? Или где именно вы меняете кодировку?   -  person deceze♦    schedule 09.01.2012
comment
@deceze вау, хорошо. Я просто подумал, что это другой вид или стиль для апострофа.   -  person LordZardeck    schedule 09.01.2012
comment
@deceze - Значит, это то, с чем нам приходится иметь дело. Я обнаружил, что когда я меняю кодировку страницы просмотра на UTF-8, когда я копирую и вставляю содержимое из Word, оно правильно отображается в браузере. Я не мастер кодирования контента. Это просто то, с чем я сталкивался. Человеческий фактор может это увидеть и увидеть как апостроф, в этом и суть.   -  person Jared Farrish    schedule 09.01.2012


Ответы (2)


Вы можете использовать str_replace():

$replace = array('’' => '\''); //You can add more characters here

echo str_replace(array_keys($replace), array_values($replace), 'can’t');

Однако и ' — это два разных символа, и мне интересно, почему вы хотите обращаться с ними как с одним и тем же.

person Bailey Parker    schedule 08.01.2012
comment
это оказалось лучшим ответом на мои потребности. - person LordZardeck; 09.01.2012

Если вам нужен только вывод ASCII, вы можете использовать iconv() и транслитерировать:

iconv("UTF-8", "ASCII//TRANSLIT", "Hello’ World"); // gives "Hello' World"

Подставьте правильную исходную кодировку, если это не UTF-8.

person Kerrek SB    schedule 08.01.2012
comment
Предположим, это то, чего хочет ОП, это лучшее решение. +1 - person deceze♦; 09.01.2012
comment
Как я могу определить исходную кодировку? - person LordZardeck; 09.01.2012
comment
@LordZardeck: Вы должны это знать. Он будет привязан к информации, откуда исходит ваша исходная строка. Проконсультируйтесь с вашим руководителем или проектной документацией, если сомневаетесь... - person Kerrek SB; 09.01.2012
comment
лол, у меня нет супервайзера, и что вы подразумеваете под проектной документацией? Кроме того, я получаю свой контент с веб-сайта, если это помогает - person LordZardeck; 09.01.2012
comment
@LordZardeck: Ну, струны не берутся из воздуха. Каждая текстовая строка должна в той или иной форме содержать информацию о кодировке, иначе это просто бесполезная куча байтов. Если строка не находится в переносимом формате с самоописанием, эта информация должна быть задокументирована в другом месте; в противном случае вам просто нужно лучше познакомиться со всей средой, в которой вы работаете, и узнать, как узнать информацию о кодировании строк (например, заголовки HTTP для веб-трафика). - person Kerrek SB; 09.01.2012