¿Reemplazar caracteres con palabra en PHP?

Quiere reemplazar letras específicas en una cadena por una palabra completa.

Estoy usando:

    function spec2hex($instr) {

   for ($i=0; $i<strlen($instr); $i++) {  

        $char = substr($instr, $i,1);  

        if ($char == "a"){
            $char = "hello";
        }

        $convString .= "&#".ord($char).";"; 

    }

    return $convString;
}

$myString = "adam";

$convertedString = spec2hex($myString);

echo $convertedString;

pero eso es volver:

hdhm

¿Cómo hago esto? Por cierto, esto es para reemplazar la puntuación con caracteres hexadecimales.

Gracias a todos.

preguntado el 09 de marzo de 12 a las 15:03

Su pregunta es muy vaga: solo dé un ejemplo de entrada y salida deseada. -

El problema con el que te encuentras es que ord($char) no siempre es un solo carácter, que es lo que ord espera. -

5 Respuestas

Utilice la herramienta http://php.net/substr_replace

substr_replace($instr, $word, $i,1); 

respondido 09 mar '12, 15:03

ord() espera sólo un carácter ÚNICO. estas pasando hello, entonces ord está haciendo lo suyo solo en el h:

php > echo ord('hello');
104
php > echo ord('h');
104

Entonces, en efecto, su salida es en realidad

&#104;d&#104;m

respondido 09 mar '12, 15:03

No, pero puede 'explotar' una cadena en caracteres individuales y aplicar ord en un bucle. - Marc B

si quieres usar tu mismo código solo cambia $convString .= "&#".ord($char).";";

a $convString .= $char;

respondido 09 mar '12, 15:03

Si solo desea reemplazar la aparición de a con hello dentro de la cadena que pasa a la función, ¿por qué no usar PHP? str_replace()?

function spec2hex($instr) {    
  return str_replace("a","hello",$instr);
}

respondido 09 mar '12, 15:03

Debo asumir que no desea tener caracteres hexadecimales en lugar de puntuación sino entidades html. Tenga en cuenta que str_replace(), cuando se llama con matrices, se ejecutará sobre la cadena varias veces, reemplazando así el ";" en "&#123;" ¡además!

Su código publicado no es útil para reemplazar la puntuación.

use strtr() con matrices, no tiene el inconveniente de str_replace().

$aReplacements = array(',' => '&#44;', '.' => '&#46;'); //todo: complete the array
$sText = strtr($sText, $aReplacements);

respondido 09 mar '12, 15:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.