Почему str_replace () заменяет только один экземпляр символа в строке? - PullRequest
0 голосов
/ 27 января 2012

У меня есть большая строковая переменная, которая назначается из столбца базы данных типа " Text" с сопоставлением latin_swedish_ci.

Поскольку это в ASCII, мне нужно заменить все не UTF-8 символов, прежде чем я смогу ввести переменную в свой сценарий создания PDF.

Как мы все знаем, стандарты, используемые PDF, являются злом.Если я использую простой ASCII-ввод, он сойдет с ума и вызовет разрыв в пространстве-времени.

Поэтому, чтобы предотвратить дальнейшее повреждение нашей вселенной, мне нужно помочь выяснить, почему эта функция str_replace() только заменяетодин из типов символов и игнорирование любых повторений этого символа

Вот мой код:

$tc = str_replace (array("\n", "£", "&"), array("<br/>", "&pound;", "&amp;"), $tc);

Ввод:

Terms & Conditions: Mandatory charge of £10 for cancellations.    
VAT E&EO

Выход:

Terms &amp; Conditions: Mandatory charge of &pound;10 for cancellations.
VAT E&EO

Как видно из вывода во второй строке, str_replace() не меняет символ амперсанда.

Интересно, так ли это из-за того, что оно состоит из двух строк или что-то в этом роде?

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

1 Ответ

3 голосов
/ 27 января 2012

Похоже, что вы пытаетесь достичь, можно сделать с помощью этих 2 функций:

nl2br(htmlentities($tc));

Преимущество заключается в том, что если в будущем ваши $tc переменные получат больше HTML-сущностей, вам не придется возиться с str_replace().

...