Преобразование Æ в «Ae» в PHP с помощью Str_replace? - PullRequest
4 голосов
/ 20 декабря 2010

По причинам, оправданным бизнес-логикой, мне нужно преобразовать символ «Æ» в «Ae» в строке.Однако, несмотря на то, что mb_detect_encoding () говорит мне, что строка UTF-8, я не могу понять, как это сделать.(И по другим причинам бизнес-логики это может быть проблемой для htmlentities () строки перед ее заменой, как предлагали другие поисковые запросы Google.)

Сначала я попробовал это с использованием тестовой строки "Æther ":

return str_replace("Æ", 'Ae', $string); 

К сожалению, на самом деле это не находит Æ в тексте, возвращая" Æther ".

return str_replace(chr(195), 'Ae', $string); 

Это находит Æ и заменяет его, но добавляетнеизвестный персонаж впоследствии, заменяя его на непригодный для использования «Ae�ther».Поэтому я попробовал это:

$ae_character = mb_convert_encoding('&#' . intval(195) . ';', 'UTF-8', 'HTML-ENTITIES');
return str_replace($ae_character, 'Ae', $string); 

, который снова не смог найти символ in в строке.Я знаю, что это какая-то проблема с UTF-8, но я, честно говоря, озадачен тем, как искать и заменять ее, не добавляя после этого дополнительный символ.Есть идеи?

Ответы [ 2 ]

6 голосов
/ 20 декабря 2010
<?php
$x = 'Æmystr';
print str_replace('Æ', 'AE', $x); // prints: AEmystr
?>

Этот код работает отлично, я думаю, что вам не хватает, это изменить кодировку вашего файла. Ваш файл .php должен быть закодирован в формате UTF-8 или UNICODE. Это можно сделать в некоторых (текстовых) редакторах или IDE, т. Е. Eclipse, EditPlus, Notepad ++ и т. Д. Даже в Notepad на Windows 7.

При сохранении откройте диалоговое окно «Сохранить / Сохранить как», и обычно рядом с кнопкой «Сохранить» имеется выпадающий список / переключатели «Кодировка», которые позволяют выбирать между ANSI и UTF-8 (и другими). ​​

На * nix Я полагаю, что большинство редакторов имеют его, но не уверены в местах. Если после того, как вы это сделаете и заработаете, то отредактируйте / сохраните с помощью редактора, который просто выполняет ANSI, он перезапишет его с неизвестным символом и т. Д ...

Почему не работает приведенный ниже код.

return str_replace(chr(195), 'Ae', $string); 

Это потому, что символ юникода обычно состоит из двух символов вместе взятых. Итак, что у вас есть выше, это только начало символа Юникод. попробуйте это:

print str_replace(chr(195).chr(134), 'AE', $x);

Это также должно заменить его и может даже оказаться предпочтительным, поскольку вам (возможно | не нужно) изменять кодировку файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...